Commit 314a8ad0 authored by Oleg Nesterov's avatar Oleg Nesterov Committed by Linus Torvalds

pidns: fix free_pid() to handle the first fork failure

"case 0" in free_pid() assumes that disable_pid_allocation() should
clear PIDNS_HASH_ADDING before the last pid goes away.

However this doesn't happen if the first fork() fails to create the
child reaper which should call disable_pid_allocation().
Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
Reviewed-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
Cc: "Serge E. Hallyn" <serge@hallyn.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 4271b05a
...@@ -273,6 +273,11 @@ void free_pid(struct pid *pid) ...@@ -273,6 +273,11 @@ void free_pid(struct pid *pid)
*/ */
wake_up_process(ns->child_reaper); wake_up_process(ns->child_reaper);
break; break;
case PIDNS_HASH_ADDING:
/* Handle a fork failure of the first process */
WARN_ON(ns->child_reaper);
ns->nr_hashed = 0;
/* fall through */
case 0: case 0:
schedule_work(&ns->proc_work); schedule_work(&ns->proc_work);
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment