From: Oleg Nesterov Date: Mon, 30 Sep 2013 20:45:27 +0000 (-0700) Subject: pidns: fix free_pid() to handle the first fork failure X-Git-Tag: v5.15~19220^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=314a8ad0f18ac37887896b288939acd8cb17e208;p=platform%2Fkernel%2Flinux-starfive.git 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: Oleg Nesterov Reviewed-by: "Eric W. Biederman" Cc: "Serge E. Hallyn" Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/kernel/pid.c b/kernel/pid.c index ebe5e80..9b9a266 100644 --- a/kernel/pid.c +++ b/kernel/pid.c @@ -273,6 +273,11 @@ void free_pid(struct pid *pid) */ wake_up_process(ns->child_reaper); 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: schedule_work(&ns->proc_work); break;