diff options
Diffstat (limited to 'arch/x86/kernel/dumpstack_32.c')
-rw-r--r-- | arch/x86/kernel/dumpstack_32.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/arch/x86/kernel/dumpstack_32.c b/arch/x86/kernel/dumpstack_32.c index 5493d31be4e5..7c22f99f0efb 100644 --- a/arch/x86/kernel/dumpstack_32.c +++ b/arch/x86/kernel/dumpstack_32.c | |||
@@ -318,7 +318,7 @@ void __kprobes oops_end(unsigned long flags, struct pt_regs *regs, int signr) | |||
318 | __raw_spin_unlock(&die_lock); | 318 | __raw_spin_unlock(&die_lock); |
319 | raw_local_irq_restore(flags); | 319 | raw_local_irq_restore(flags); |
320 | 320 | ||
321 | if (!regs) | 321 | if (!signr) |
322 | return; | 322 | return; |
323 | 323 | ||
324 | if (in_interrupt()) | 324 | if (in_interrupt()) |
@@ -371,17 +371,18 @@ int __kprobes __die(const char *str, struct pt_regs *regs, long err) | |||
371 | void die(const char *str, struct pt_regs *regs, long err) | 371 | void die(const char *str, struct pt_regs *regs, long err) |
372 | { | 372 | { |
373 | unsigned long flags = oops_begin(); | 373 | unsigned long flags = oops_begin(); |
374 | int sig = SIGSEGV; | ||
374 | 375 | ||
375 | if (die_nest_count < 3) { | 376 | if (die_nest_count < 3) { |
376 | report_bug(regs->ip, regs); | 377 | report_bug(regs->ip, regs); |
377 | 378 | ||
378 | if (__die(str, regs, err)) | 379 | if (__die(str, regs, err)) |
379 | regs = NULL; | 380 | sig = 0; |
380 | } else { | 381 | } else { |
381 | printk(KERN_EMERG "Recursive die() failure, output suppressed\n"); | 382 | printk(KERN_EMERG "Recursive die() failure, output suppressed\n"); |
382 | } | 383 | } |
383 | 384 | ||
384 | oops_end(flags, regs, SIGSEGV); | 385 | oops_end(flags, regs, sig); |
385 | } | 386 | } |
386 | 387 | ||
387 | static DEFINE_SPINLOCK(nmi_print_lock); | 388 | static DEFINE_SPINLOCK(nmi_print_lock); |