Commit a8544919 authored by Matthew Wilcox's avatar Matthew Wilcox Committed by Greg Kroah-Hartman

Fix failure path in alloc_pid()

commit 1a80dade upstream.

The failure path removes the allocated PIDs from the wrong namespace.
This could lead to us inadvertently reusing PIDs in the leaf namespace
and leaking PIDs in parent namespaces.

Fixes: 95846ecf ("pid: replace pid bitmap implementation with IDR API")
Cc: <stable@vger.kernel.org>
Signed-off-by: default avatarMatthew Wilcox <willy@infradead.org>
Acked-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
Reviewed-by: default avatarOleg Nesterov <oleg@redhat.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 5781b53d
...@@ -233,8 +233,10 @@ struct pid *alloc_pid(struct pid_namespace *ns) ...@@ -233,8 +233,10 @@ struct pid *alloc_pid(struct pid_namespace *ns)
out_free: out_free:
spin_lock_irq(&pidmap_lock); spin_lock_irq(&pidmap_lock);
while (++i <= ns->level) while (++i <= ns->level) {
idr_remove(&ns->idr, (pid->numbers + i)->nr); upid = pid->numbers + i;
idr_remove(&upid->ns->idr, upid->nr);
}
/* On failure to allocate the first pid, reset the state */ /* On failure to allocate the first pid, reset the state */
if (ns->pid_allocated == PIDNS_ADDING) if (ns->pid_allocated == PIDNS_ADDING)
......
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