diff options
author | Paul Mackerras <paulus@samba.org> | 2005-09-10 07:13:11 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-09-10 13:15:11 -0400 |
commit | bb0bb3b6596cdb08adb0b72453cc67d48e139c2c (patch) | |
tree | f9116ed650d499d405a3fe021c473f9558897d96 /arch/ppc/mm | |
parent | 1e63bc7342c40f0f1dd83d80d368665bd06f4963 (diff) |
[PATCH] ppc32: Kill init on unhandled synchronous signals
This is a patch that I have had in my tree for ages. If init causes
an exception that raises a signal, such as a SIGSEGV, SIGILL or
SIGFPE, and it hasn't registered a handler for it, we don't deliver
the signal, since init doesn't get any signals that it doesn't have a
handler for. But that means that we just return to userland and
generate the same exception again immediately. With this patch we
print a message and kill init in this situation.
This is very useful when you have a bug in the kernel that means that
init doesn't get as far as executing its first instruction. :)
Without this patch the system hangs when it gets to starting the
userland init; with it you at least get a message giving you a clue
about what has gone wrong.
Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/ppc/mm')
-rw-r--r-- | arch/ppc/mm/fault.c | 6 |
1 files changed, 1 insertions, 5 deletions
diff --git a/arch/ppc/mm/fault.c b/arch/ppc/mm/fault.c index 57d9930843ac..ee5e9f25baf9 100644 --- a/arch/ppc/mm/fault.c +++ b/arch/ppc/mm/fault.c | |||
@@ -278,11 +278,7 @@ bad_area: | |||
278 | 278 | ||
279 | /* User mode accesses cause a SIGSEGV */ | 279 | /* User mode accesses cause a SIGSEGV */ |
280 | if (user_mode(regs)) { | 280 | if (user_mode(regs)) { |
281 | info.si_signo = SIGSEGV; | 281 | _exception(SIGSEGV, regs, code, address); |
282 | info.si_errno = 0; | ||
283 | info.si_code = code; | ||
284 | info.si_addr = (void __user *) address; | ||
285 | force_sig_info(SIGSEGV, &info, current); | ||
286 | return 0; | 282 | return 0; |
287 | } | 283 | } |
288 | 284 | ||