Commit 4d1ec6bc authored by Oleg Nesterov's avatar Oleg Nesterov Committed by Luis Henriques

exit: pidns: alloc_pid() leaks pid_namespace if child_reaper is exiting

commit 24c037eb upstream.

alloc_pid() does get_pid_ns() beforehand but forgets to put_pid_ns() if it
fails because disable_pid_allocation() was called by the exiting
child_reaper.

We could simply move get_pid_ns() down to successful return, but this fix
tries to be as trivial as possible.
Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
Reviewed-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
Cc: Aaron Tomlin <atomlin@redhat.com>
Cc: Pavel Emelyanov <xemul@parallels.com>
Cc: Serge Hallyn <serge.hallyn@ubuntu.com>
Cc: Sterling Alexander <stalexan@redhat.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: default avatarLuis Henriques <luis.henriques@canonical.com>
parent 2bf2996b
...@@ -341,6 +341,8 @@ struct pid *alloc_pid(struct pid_namespace *ns) ...@@ -341,6 +341,8 @@ struct pid *alloc_pid(struct pid_namespace *ns)
out_unlock: out_unlock:
spin_unlock_irq(&pidmap_lock); spin_unlock_irq(&pidmap_lock);
put_pid_ns(ns);
out_free: out_free:
while (++i <= ns->level) while (++i <= ns->level)
free_pidmap(pid->numbers + i); free_pidmap(pid->numbers + i);
......
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