exit_signal: fix the "parent has changed security domain" logic
authorOleg Nesterov <oleg@redhat.com>
Mon, 19 Mar 2012 16:03:41 +0000 (17:03 +0100)
committerBen Hutchings <ben@decadent.org.uk>
Fri, 11 May 2012 12:15:04 +0000 (13:15 +0100)
commit82b8227228169ca4c3b138f6ad1171913c14f784
tree590f4b0e1c27a228ac7c01c11628e37e6ad25511
parent3dc731904fb3bad1d3dbd8870cf4461fb2b31680
exit_signal: fix the "parent has changed security domain" logic

commit b6e238dceed36891cc633167afe7151f1f3d83c5 upstream.

exit_notify() changes ->exit_signal if the parent already did exec.
This doesn't really work, we are not going to send the signal now
if there is another live thread or the exiting task is traced. The
parent can exec before the last dies or the tracer detaches.

Move this check into do_notify_parent() which actually sends the
signal.

The user-visible change is that we do not change ->exit_signal,
and thus the exiting task is still "clone children" for
do_wait()->eligible_child(__WCLONE). Hopefully this is fine, the
current logic is racy anyway.

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
kernel/exit.c
kernel/signal.c