MIPS: Use force_sig when handling address errors.
authorDavid Daney <ddaney@caviumnetworks.com>
Tue, 5 May 2009 19:49:47 +0000 (12:49 -0700)
committerRalf Baechle <ralf@linux-mips.org>
Thu, 14 May 2009 12:50:29 +0000 (13:50 +0100)
When init is started it is SIGNAL_UNKILLABLE.  If it were to get an
address error, we would try to send it SIGBUS, but it would be ignored
and the faulting instruction restarted.  This results in an endless
loop.

We need to use force_sig() instead so it will actually die and give us
some useful information.

Reported-by: Florian Fainelli <florian@openwrt.org>
Signed-off-by: David Daney <ddaney@caviumnetworks.com>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/kernel/unaligned.c

index bf4c4a979abb787775477d1b42e2b7e54a43b9c3..67bd626942ab044de7b3b6b7e7261f4e1439dc21 100644 (file)
@@ -482,19 +482,19 @@ fault:
                return;
 
        die_if_kernel("Unhandled kernel unaligned access", regs);
-       send_sig(SIGSEGV, current, 1);
+       force_sig(SIGSEGV, current);
 
        return;
 
 sigbus:
        die_if_kernel("Unhandled kernel unaligned access", regs);
-       send_sig(SIGBUS, current, 1);
+       force_sig(SIGBUS, current);
 
        return;
 
 sigill:
        die_if_kernel("Unhandled kernel unaligned access or invalid instruction", regs);
-       send_sig(SIGILL, current, 1);
+       force_sig(SIGILL, current);
 }
 
 asmlinkage void do_ade(struct pt_regs *regs)