]> Git Repo - linux.git/commit - kernel/kmod.c
kmod: don't run async usermode helper as a child of kworker thread
authorOleg Nesterov <[email protected]>
Thu, 22 Oct 2015 20:32:08 +0000 (13:32 -0700)
committerLinus Torvalds <[email protected]>
Fri, 23 Oct 2015 08:55:10 +0000 (17:55 +0900)
commit5211613978cb7353a3237e4372958c0e7514683f
tree01fae404b1b576e032245ef68ee50f0a92ea8090
parent8a70dd2669200ce83255ed8c5ebef7e59f9e8707
kmod: don't run async usermode helper as a child of kworker thread

call_usermodehelper_exec_sync() does fork() + wait() with "unignored"
SIGCHLD.  What we have missed is that this worker thread can have other
children previously forked by call_usermodehelper_exec_work() without
UMH_WAIT_PROC.  If such a child exits in between it becomes a zombie
because auto-reaping only works if SIGCHLD is ignored, and nobody can
reap it (unless/until this worker thread exits too).

Change the !UMH_WAIT_PROC case to use CLONE_PARENT.

Note: this is only first step.  All PF_KTHREAD tasks, even created by
kernel_thread() should have ->parent == kthreadd by default.

Fixes: bb304a5c6fc63d8506c ("kmod: handle UMH_WAIT_PROC from system unbound workqueue")
Signed-off-by: Oleg Nesterov <[email protected]>
Acked-by: Frederic Weisbecker <[email protected]>
Cc: Rik van Riel <[email protected]>
Cc: Christoph Lameter <[email protected]>
Cc: Tejun Heo <[email protected]>
Cc: Rusty Russell <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
kernel/kmod.c
This page took 0.049571 seconds and 4 git commands to generate.