Messages in this thread Patch in this message | | | Date | Tue, 10 Nov 2009 01:25:42 +0100 | From | Oleg Nesterov <> | Subject | [PATCH] powerpc: _exception: kill the obsolete code under is_global_init() |
| |
The code under "if (is_global_init())" is bogus, and is_global_init() itself is not right in mt case.
Contrary to what the comment says, nowadays force_sig_info() does kill init even if the handler is SIG_DFL. Note that force_sig_info() clears SIGNAL_UNKILLABLE exactly for this case.
Signed-off-by: Oleg Nesterov <oleg@redhat.com> ---
arch/powerpc/kernel/traps.c | 22 ---------------------- 1 file changed, 22 deletions(-)
--- TH/arch/powerpc/kernel/traps.c~PPC_EXCEPTION_DONT_CK_INIT 2009-11-10 01:03:23.000000000 +0100 +++ TH/arch/powerpc/kernel/traps.c 2009-11-10 01:06:41.000000000 +0100 @@ -198,28 +198,6 @@ void _exception(int signr, struct pt_reg info.si_code = code; info.si_addr = (void __user *) addr; force_sig_info(signr, &info, current); - - /* - * Init gets no signals that it doesn't have a handler for. - * That's all very well, but if it has caused a synchronous - * exception and we ignore the resulting signal, it will just - * generate the same exception over and over again and we get - * nowhere. Better to kill it and let the kernel panic. - */ - if (is_global_init(current)) { - __sighandler_t handler; - - spin_lock_irq(¤t->sighand->siglock); - handler = current->sighand->action[signr-1].sa.sa_handler; - spin_unlock_irq(¤t->sighand->siglock); - if (handler == SIG_DFL) { - /* init has generated a synchronous exception - and it doesn't have a handler for the signal */ - printk(KERN_CRIT "init has generated signal %d " - "but has no handler for it\n", signr); - do_exit(signr); - } - } } #ifdef CONFIG_PPC64
| |