Messages in this thread Patch in this message | | | From | Roland McGrath <> | Subject | Re: [PATCH 1/2] protect /sbin/init from unwanted signals more | Date | Wed, 19 Nov 2008 10:51:48 -0800 (PST) |
| |
The effect is fine, but that seems like a kludgey way to do it. I really don't think the sigaction case matters--certainly it will never come up with SIGKILL. What about just this instead?
--- a/kernel/signal.c +++ b/kernel/signal.c @@ -66,6 +66,15 @@ static int sig_ignored(struct task_struct *t, int sig) return 0; handler = sig_handler(t, sig); + + /* + * For init, short-circuit any signal without a handler. + * We won't allow them to be delivered, so don't even queue them. + */ + if (unlikely(signal->flags & SIGNAL_UNKILLABLE) && + (handler == SIG_IGN || handler == SIG_DFL)) + return 1; + if (!sig_handler_ignored(handler, sig)) return 0; With that, I wonder if the SIGNAL_UNKILLABLE checks in get_signal_to_deliver and complete_signal are needed at all. Hmm, I guess we do because this doesn't affect blocked signals, so they might be unblocked and delivered. (Note that since it doesn't affect blocked signals, this doesn't break init using sigwait if it wanted to.)
Thanks, Roland
| |