aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm64
diff options
context:
space:
mode:
authorCatalin Marinas <catalin.marinas@arm.com>2013-05-21 07:16:56 -0400
committerCatalin Marinas <catalin.marinas@arm.com>2013-05-24 12:31:04 -0400
commit953dbbed9ee310100bc841cdea8f992d192531c6 (patch)
tree057f5909fd8f0153a43087d57fe616ef57734398 /arch/arm64
parent726dcaa158b316f02f7dec2cf6dbf61c30a8bf22 (diff)
arm64: Do not report user faults for handled signals
Currently user faults (page, undefined instruction) are always reported even though the user may have a signal handler for them. This patch adds unhandled_signal() check together with printk_ratelimit() for these cases. Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Diffstat (limited to 'arch/arm64')
-rw-r--r--arch/arm64/kernel/traps.c5
-rw-r--r--arch/arm64/mm/fault.c3
2 files changed, 5 insertions, 3 deletions
diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c
index 61d7dd29f756..f1ff9bad00f7 100644
--- a/arch/arm64/kernel/traps.c
+++ b/arch/arm64/kernel/traps.c
@@ -267,7 +267,8 @@ asmlinkage void __exception do_undefinstr(struct pt_regs *regs)
267 return; 267 return;
268#endif 268#endif
269 269
270 if (show_unhandled_signals) { 270 if (show_unhandled_signals && unhandled_signal(current, SIGILL) &&
271 printk_ratelimit()) {
271 pr_info("%s[%d]: undefined instruction: pc=%p\n", 272 pr_info("%s[%d]: undefined instruction: pc=%p\n",
272 current->comm, task_pid_nr(current), pc); 273 current->comm, task_pid_nr(current), pc);
273 dump_instr(KERN_INFO, regs); 274 dump_instr(KERN_INFO, regs);
@@ -294,7 +295,7 @@ asmlinkage long do_ni_syscall(struct pt_regs *regs)
294 } 295 }
295#endif 296#endif
296 297
297 if (show_unhandled_signals) { 298 if (show_unhandled_signals && printk_ratelimit()) {
298 pr_info("%s[%d]: syscall %d\n", current->comm, 299 pr_info("%s[%d]: syscall %d\n", current->comm,
299 task_pid_nr(current), (int)regs->syscallno); 300 task_pid_nr(current), (int)regs->syscallno);
300 dump_instr("", regs); 301 dump_instr("", regs);
diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c
index 98af6e760cce..1426468b77f3 100644
--- a/arch/arm64/mm/fault.c
+++ b/arch/arm64/mm/fault.c
@@ -113,7 +113,8 @@ static void __do_user_fault(struct task_struct *tsk, unsigned long addr,
113{ 113{
114 struct siginfo si; 114 struct siginfo si;
115 115
116 if (show_unhandled_signals) { 116 if (show_unhandled_signals && unhandled_signal(tsk, sig) &&
117 printk_ratelimit()) {
117 pr_info("%s[%d]: unhandled %s (%d) at 0x%08lx, esr 0x%03x\n", 118 pr_info("%s[%d]: unhandled %s (%d) at 0x%08lx, esr 0x%03x\n",
118 tsk->comm, task_pid_nr(tsk), fault_name(esr), sig, 119 tsk->comm, task_pid_nr(tsk), fault_name(esr), sig,
119 addr, esr); 120 addr, esr);