diff --git a/kernel/pid.c b/kernel/pid.c index f633a7d..1a95235 100644 --- a/kernel/pid.c +++ b/kernel/pid.c @@ -300,7 +300,7 @@ void free_pid(struct pid *pid) unsigned long flags; spin_lock_irqsave(&pidmap_lock, flags); - for (i = 0; i <= pid->level; i++) { + for (i = pid->level; i >= 0; i--) { struct upid *upid = pid->numbers + i; struct pid_namespace *ns = upid->ns; if (!hlist_unhashed(&upid->pid_chain)) @@ -323,6 +323,8 @@ void free_pid(struct pid *pid) schedule_work(&ns->proc_work); break; } + if (ns->flags & PID_NS_HIDDEN) + break; } spin_unlock_irqrestore(&pidmap_lock, flags); ub_kmem_uncharge(pid->ub,