exit: fix the setns() && PR_SET_CHILD_SUBREAPER interaction
authorOleg Nesterov <oleg@redhat.com>
Mon, 30 Jan 2017 18:17:35 +0000 (19:17 +0100)
committerEric W. Biederman <ebiederm@xmission.com>
Wed, 1 Feb 2017 05:20:48 +0000 (18:20 +1300)
commitc6c70f4455d1eda91065e93cc4f7eddf4499b105
treebf2f38330bc30a13329ae275172deffe863b36a8
parent1328c727004d432bbdfba0ffa02a166df04c7305
exit: fix the setns() && PR_SET_CHILD_SUBREAPER interaction

find_new_reaper() checks same_thread_group(reaper, child_reaper) to
prevent the cross-namespace reparenting but this is not enough if the
exiting parent was injected by setns() + fork().

Suppose we have a process P in the root namespace and some namespace X.
P does setns() to enter the X namespace, and forks the child C.
C forks a grandchild G and exits.

The grandchild G should be re-parented to X->child_reaper, but in this
case the ->real_parent chain does not lead to ->child_reaper, so it will
be wrongly reparanted to P's sub-reaper or a global init.

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
kernel/exit.c