aboutsummaryrefslogtreecommitdiffstats
path: root/arch/i386/mm/fault.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/i386/mm/fault.c')
-rw-r--r--arch/i386/mm/fault.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/i386/mm/fault.c b/arch/i386/mm/fault.c
index e92a10124935..01ffdd4964f0 100644
--- a/arch/i386/mm/fault.c
+++ b/arch/i386/mm/fault.c
@@ -283,6 +283,8 @@ static inline int vmalloc_fault(unsigned long address)
283 return 0; 283 return 0;
284} 284}
285 285
286int show_unhandled_signals = 1;
287
286/* 288/*
287 * This routine handles page faults. It determines the address, 289 * This routine handles page faults. It determines the address,
288 * and the problem, and then passes it off to one of the appropriate 290 * and the problem, and then passes it off to one of the appropriate
@@ -469,6 +471,14 @@ bad_area_nosemaphore:
469 if (is_prefetch(regs, address, error_code)) 471 if (is_prefetch(regs, address, error_code))
470 return; 472 return;
471 473
474 if (show_unhandled_signals && unhandled_signal(tsk, SIGSEGV) &&
475 printk_ratelimit()) {
476 printk("%s%s[%d]: segfault at %08lx eip %08lx "
477 "esp %08lx error %lx\n",
478 tsk->pid > 1 ? KERN_INFO : KERN_EMERG,
479 tsk->comm, tsk->pid, address, regs->eip,
480 regs->esp, error_code);
481 }
472 tsk->thread.cr2 = address; 482 tsk->thread.cr2 = address;
473 /* Kernel addresses are always protection faults */ 483 /* Kernel addresses are always protection faults */
474 tsk->thread.error_code = error_code | (address >= TASK_SIZE); 484 tsk->thread.error_code = error_code | (address >= TASK_SIZE);