diff options
author | Oleg Nesterov <oleg@redhat.com> | 2012-03-05 14:59:13 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-05 15:49:42 -0800 |
commit | d68b46fe16ad59b3a5f51ec73daaa5dc06753798 (patch) | |
tree | 4bae9ddc5f5bed853d1f0936d05c30e4f7ca924d /fs | |
parent | c415c3b47ea2754659d915cca387a20999044163 (diff) | |
download | linux-d68b46fe16ad59b3a5f51ec73daaa5dc06753798.tar.gz linux-d68b46fe16ad59b3a5f51ec73daaa5dc06753798.tar.bz2 linux-d68b46fe16ad59b3a5f51ec73daaa5dc06753798.zip |
vfork: make it killable
Make vfork() killable.
Change do_fork(CLONE_VFORK) to do wait_for_completion_killable(). If it
fails we do not return to the user-mode and never touch the memory shared
with our child.
However, in this case we should clear child->vfork_done before return, we
use task_lock() in do_fork()->wait_for_vfork_done() and
complete_vfork_done() to serialize with each other.
Note: now that we use task_lock() we don't really need completion, we
could turn task->vfork_done into "task_struct *wake_up_me" but this needs
some complications.
NOTE: this and the next patches do not affect in-kernel users of
CLONE_VFORK, kernel threads run with all signals ignored including
SIGKILL/SIGSTOP.
However this is obviously the user-visible change. Not only a fatal
signal can kill the vforking parent, a sub-thread can do execve or
exit_group() and kill the thread sleeping in vfork().
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs')
0 files changed, 0 insertions, 0 deletions