The patch titled signals: protect /sbin/init from unwanted signals more has been removed from the -mm tree. Its filename was signals-protect-sbin-init-from-unwanted-signals-more.patch This patch was dropped because an updated version will be merged The current -mm tree may be found at http://userweb.kernel.org/~akpm/mmotm/ ------------------------------------------------------ Subject: signals: protect /sbin/init from unwanted signals more From: Oleg Nesterov <oleg@xxxxxxxxxx> init ignores the SIG_DFL signals but we queue them anyway, including SIGKILL. This is mostly OK, the signal will be dropped silently when dequeued, but the pending SIGKILL has 2 bad implications: - it implies fatal_signal_pending(), so we confuse things like wait_for_completion_killable/lock_page_killable. - for the sub-namespace inits, the pending SIGKILL can mask (legacy_queue) the subsequent SIGKILL from the parent namespace which must kill cinit reliably. (preparation, cinits don't have SIGNAL_UNKILLABLE yet) The patch can't help when init is ptraced, but ptracing of init is not "safe" anyway. Signed-off-by: Oleg Nesterov <oleg@xxxxxxxxxx> Cc: "Eric W. Biederman" <ebiederm@xxxxxxxxxxxx> Cc: Pavel Emelyanov <xemul@xxxxxxxxxx> Cc: Roland McGrath <roland@xxxxxxxxxx> Cc: "Serge E. Hallyn" <serue@xxxxxxxxxx> Cc: Sukadev Bhattiprolu <sukadev@xxxxxxxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- kernel/signal.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff -puN kernel/signal.c~signals-protect-sbin-init-from-unwanted-signals-more kernel/signal.c --- a/kernel/signal.c~signals-protect-sbin-init-from-unwanted-signals-more +++ a/kernel/signal.c @@ -43,7 +43,13 @@ static struct kmem_cache *sigqueue_cache static void __user *sig_handler(struct task_struct *t, int sig) { - return t->sighand->action[sig - 1].sa.sa_handler; + void __user *h = t->sighand->action[sig - 1].sa.sa_handler; + + /* drop SIGKILL early to not confuse wait_xxx_killable/etc */ + if (unlikely(t->signal->flags & SIGNAL_UNKILLABLE) && h == SIG_DFL) + h = SIG_IGN; + + return h; } static int sig_handler_ignored(void __user *handler, int sig) _ Patches currently in -mm which might be from oleg@xxxxxxxxxx are origin.patch forkc-cleanup-for-copy_sighand.patch do_wait-wakeup-optimization.patch signals-protect-sbin-init-from-unwanted-signals-more.patch signals-simplify-sig_ignored-pathes.patch workqueues-kill-cpu_singlethread_map-use-get_cpu_mask-instead.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html