1 /* 2 * Based on arch/arm/kernel/traps.c 3 * 4 * Copyright (C) 1995-2009 Russell King 5 * Copyright (C) 2012 ARM Ltd. 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as 9 * published by the Free Software Foundation. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 #include <linux/bug.h> 21 #include <linux/signal.h> 22 #include <linux/personality.h> 23 #include <linux/kallsyms.h> 24 #include <linux/spinlock.h> 25 #include <linux/uaccess.h> 26 #include <linux/hardirq.h> 27 #include <linux/kdebug.h> 28 #include <linux/module.h> 29 #include <linux/kexec.h> 30 #include <linux/delay.h> 31 #include <linux/init.h> 32 #include <linux/sched.h> 33 #include <linux/syscalls.h> 34 35 #include <asm/atomic.h> 36 #include <asm/bug.h> 37 #include <asm/debug-monitors.h> 38 #include <asm/esr.h> 39 #include <asm/insn.h> 40 #include <asm/traps.h> 41 #include <asm/stacktrace.h> 42 #include <asm/exception.h> 43 #include <asm/system_misc.h> 44 45 static const char *handler[]= { 46 "Synchronous Abort", 47 "IRQ", 48 "FIQ", 49 "Error" 50 }; 51 52 int show_unhandled_signals = 1; 53 54 /* 55 * Dump out the contents of some memory nicely... 56 */ 57 static void dump_mem(const char *lvl, const char *str, unsigned long bottom, 58 unsigned long top, bool compat) 59 { 60 unsigned long first; 61 mm_segment_t fs; 62 int i; 63 unsigned int width = compat ? 4 : 8; 64 65 /* 66 * We need to switch to kernel mode so that we can use __get_user 67 * to safely read from kernel space. Note that we now dump the 68 * code first, just in case the backtrace kills us. 69 */ 70 fs = get_fs(); 71 set_fs(KERNEL_DS); 72 73 printk("%s%s(0x%016lx to 0x%016lx)\n", lvl, str, bottom, top); 74 75 for (first = bottom & ~31; first < top; first += 32) { 76 unsigned long p; 77 char str[sizeof(" 12345678") * 8 + 1]; 78 79 memset(str, ' ', sizeof(str)); 80 str[sizeof(str) - 1] = '\0'; 81 82 for (p = first, i = 0; i < (32 / width) 83 && p < top; i++, p += width) { 84 if (p >= bottom && p < top) { 85 unsigned long val; 86 87 if (width == 8) { 88 if (__get_user(val, (unsigned long *)p) == 0) 89 sprintf(str + i * 17, " %016lx", val); 90 else 91 sprintf(str + i * 17, " ????????????????"); 92 } else { 93 if (__get_user(val, (unsigned int *)p) == 0) 94 sprintf(str + i * 9, " %08lx", val); 95 else 96 sprintf(str + i * 9, " ????????"); 97 } 98 } 99 } 100 printk("%s%04lx:%s\n", lvl, first & 0xffff, str); 101 } 102 103 set_fs(fs); 104 } 105 106 static void dump_backtrace_entry(unsigned long where) 107 { 108 /* 109 * Note that 'where' can have a physical address, but it's not handled. 110 */ 111 print_ip_sym(where); 112 } 113 114 static void dump_instr(const char *lvl, struct pt_regs *regs) 115 { 116 unsigned long addr = instruction_pointer(regs); 117 mm_segment_t fs; 118 char str[sizeof("00000000 ") * 5 + 2 + 1], *p = str; 119 int i; 120 121 /* 122 * We need to switch to kernel mode so that we can use __get_user 123 * to safely read from kernel space. Note that we now dump the 124 * code first, just in case the backtrace kills us. 125 */ 126 fs = get_fs(); 127 set_fs(KERNEL_DS); 128 129 for (i = -4; i < 1; i++) { 130 unsigned int val, bad; 131 132 bad = __get_user(val, &((u32 *)addr)[i]); 133 134 if (!bad) 135 p += sprintf(p, i == 0 ? "(%08x) " : "%08x ", val); 136 else { 137 p += sprintf(p, "bad PC value"); 138 break; 139 } 140 } 141 printk("%sCode: %s\n", lvl, str); 142 143 set_fs(fs); 144 } 145 146 static void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk) 147 { 148 struct stackframe frame; 149 unsigned long irq_stack_ptr = IRQ_STACK_PTR(smp_processor_id()); 150 int skip; 151 152 pr_debug("%s(regs = %p tsk = %p)\n", __func__, regs, tsk); 153 154 if (!tsk) 155 tsk = current; 156 157 if (tsk == current) { 158 frame.fp = (unsigned long)__builtin_frame_address(0); 159 frame.sp = current_stack_pointer; 160 frame.pc = (unsigned long)dump_backtrace; 161 } else { 162 /* 163 * task blocked in __switch_to 164 */ 165 frame.fp = thread_saved_fp(tsk); 166 frame.sp = thread_saved_sp(tsk); 167 frame.pc = thread_saved_pc(tsk); 168 } 169 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 170 frame.graph = tsk->curr_ret_stack; 171 #endif 172 173 skip = !!regs; 174 printk("Call trace:\n"); 175 while (1) { 176 unsigned long where = frame.pc; 177 unsigned long stack; 178 int ret; 179 180 /* skip until specified stack frame */ 181 if (!skip) { 182 dump_backtrace_entry(where); 183 } else if (frame.fp == regs->regs[29]) { 184 skip = 0; 185 /* 186 * Mostly, this is the case where this function is 187 * called in panic/abort. As exception handler's 188 * stack frame does not contain the corresponding pc 189 * at which an exception has taken place, use regs->pc 190 * instead. 191 */ 192 dump_backtrace_entry(regs->pc); 193 } 194 ret = unwind_frame(tsk, &frame); 195 if (ret < 0) 196 break; 197 stack = frame.sp; 198 if (in_exception_text(where)) { 199 /* 200 * If we switched to the irq_stack before calling this 201 * exception handler, then the pt_regs will be on the 202 * task stack. The easiest way to tell is if the large 203 * pt_regs would overlap with the end of the irq_stack. 204 */ 205 if (stack < irq_stack_ptr && 206 (stack + sizeof(struct pt_regs)) > irq_stack_ptr) 207 stack = IRQ_STACK_TO_TASK_STACK(irq_stack_ptr); 208 209 dump_mem("", "Exception stack", stack, 210 stack + sizeof(struct pt_regs), false); 211 } 212 } 213 } 214 215 void show_stack(struct task_struct *tsk, unsigned long *sp) 216 { 217 dump_backtrace(NULL, tsk); 218 barrier(); 219 } 220 221 #ifdef CONFIG_PREEMPT 222 #define S_PREEMPT " PREEMPT" 223 #else 224 #define S_PREEMPT "" 225 #endif 226 #define S_SMP " SMP" 227 228 static int __die(const char *str, int err, struct thread_info *thread, 229 struct pt_regs *regs) 230 { 231 struct task_struct *tsk = thread->task; 232 static int die_counter; 233 int ret; 234 235 pr_emerg("Internal error: %s: %x [#%d]" S_PREEMPT S_SMP "\n", 236 str, err, ++die_counter); 237 238 /* trap and error numbers are mostly meaningless on ARM */ 239 ret = notify_die(DIE_OOPS, str, regs, err, 0, SIGSEGV); 240 if (ret == NOTIFY_STOP) 241 return ret; 242 243 print_modules(); 244 __show_regs(regs); 245 pr_emerg("Process %.*s (pid: %d, stack limit = 0x%p)\n", 246 TASK_COMM_LEN, tsk->comm, task_pid_nr(tsk), thread + 1); 247 248 if (!user_mode(regs) || in_interrupt()) { 249 dump_mem(KERN_EMERG, "Stack: ", regs->sp, 250 THREAD_SIZE + (unsigned long)task_stack_page(tsk), 251 compat_user_mode(regs)); 252 dump_backtrace(regs, tsk); 253 dump_instr(KERN_EMERG, regs); 254 } 255 256 return ret; 257 } 258 259 static DEFINE_RAW_SPINLOCK(die_lock); 260 261 /* 262 * This function is protected against re-entrancy. 263 */ 264 void die(const char *str, struct pt_regs *regs, int err) 265 { 266 struct thread_info *thread = current_thread_info(); 267 int ret; 268 269 oops_enter(); 270 271 raw_spin_lock_irq(&die_lock); 272 console_verbose(); 273 bust_spinlocks(1); 274 ret = __die(str, err, thread, regs); 275 276 if (regs && kexec_should_crash(thread->task)) 277 crash_kexec(regs); 278 279 bust_spinlocks(0); 280 add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE); 281 raw_spin_unlock_irq(&die_lock); 282 oops_exit(); 283 284 if (in_interrupt()) 285 panic("Fatal exception in interrupt"); 286 if (panic_on_oops) 287 panic("Fatal exception"); 288 if (ret != NOTIFY_STOP) 289 do_exit(SIGSEGV); 290 } 291 292 void arm64_notify_die(const char *str, struct pt_regs *regs, 293 struct siginfo *info, int err) 294 { 295 if (user_mode(regs)) { 296 current->thread.fault_address = 0; 297 current->thread.fault_code = err; 298 force_sig_info(info->si_signo, info, current); 299 } else { 300 die(str, regs, err); 301 } 302 } 303 304 static LIST_HEAD(undef_hook); 305 static DEFINE_RAW_SPINLOCK(undef_lock); 306 307 void register_undef_hook(struct undef_hook *hook) 308 { 309 unsigned long flags; 310 311 raw_spin_lock_irqsave(&undef_lock, flags); 312 list_add(&hook->node, &undef_hook); 313 raw_spin_unlock_irqrestore(&undef_lock, flags); 314 } 315 316 void unregister_undef_hook(struct undef_hook *hook) 317 { 318 unsigned long flags; 319 320 raw_spin_lock_irqsave(&undef_lock, flags); 321 list_del(&hook->node); 322 raw_spin_unlock_irqrestore(&undef_lock, flags); 323 } 324 325 static int call_undef_hook(struct pt_regs *regs) 326 { 327 struct undef_hook *hook; 328 unsigned long flags; 329 u32 instr; 330 int (*fn)(struct pt_regs *regs, u32 instr) = NULL; 331 void __user *pc = (void __user *)instruction_pointer(regs); 332 333 if (!user_mode(regs)) 334 return 1; 335 336 if (compat_thumb_mode(regs)) { 337 /* 16-bit Thumb instruction */ 338 if (get_user(instr, (u16 __user *)pc)) 339 goto exit; 340 instr = le16_to_cpu(instr); 341 if (aarch32_insn_is_wide(instr)) { 342 u32 instr2; 343 344 if (get_user(instr2, (u16 __user *)(pc + 2))) 345 goto exit; 346 instr2 = le16_to_cpu(instr2); 347 instr = (instr << 16) | instr2; 348 } 349 } else { 350 /* 32-bit ARM instruction */ 351 if (get_user(instr, (u32 __user *)pc)) 352 goto exit; 353 instr = le32_to_cpu(instr); 354 } 355 356 raw_spin_lock_irqsave(&undef_lock, flags); 357 list_for_each_entry(hook, &undef_hook, node) 358 if ((instr & hook->instr_mask) == hook->instr_val && 359 (regs->pstate & hook->pstate_mask) == hook->pstate_val) 360 fn = hook->fn; 361 362 raw_spin_unlock_irqrestore(&undef_lock, flags); 363 exit: 364 return fn ? fn(regs, instr) : 1; 365 } 366 367 asmlinkage void __exception do_undefinstr(struct pt_regs *regs) 368 { 369 siginfo_t info; 370 void __user *pc = (void __user *)instruction_pointer(regs); 371 372 /* check for AArch32 breakpoint instructions */ 373 if (!aarch32_break_handler(regs)) 374 return; 375 376 if (call_undef_hook(regs) == 0) 377 return; 378 379 if (unhandled_signal(current, SIGILL) && show_unhandled_signals_ratelimited()) { 380 pr_info("%s[%d]: undefined instruction: pc=%p\n", 381 current->comm, task_pid_nr(current), pc); 382 dump_instr(KERN_INFO, regs); 383 } 384 385 info.si_signo = SIGILL; 386 info.si_errno = 0; 387 info.si_code = ILL_ILLOPC; 388 info.si_addr = pc; 389 390 arm64_notify_die("Oops - undefined instruction", regs, &info, 0); 391 } 392 393 long compat_arm_syscall(struct pt_regs *regs); 394 395 asmlinkage long do_ni_syscall(struct pt_regs *regs) 396 { 397 #ifdef CONFIG_COMPAT 398 long ret; 399 if (is_compat_task()) { 400 ret = compat_arm_syscall(regs); 401 if (ret != -ENOSYS) 402 return ret; 403 } 404 #endif 405 406 if (show_unhandled_signals_ratelimited()) { 407 pr_info("%s[%d]: syscall %d\n", current->comm, 408 task_pid_nr(current), (int)regs->syscallno); 409 dump_instr("", regs); 410 if (user_mode(regs)) 411 __show_regs(regs); 412 } 413 414 return sys_ni_syscall(); 415 } 416 417 static const char *esr_class_str[] = { 418 [0 ... ESR_ELx_EC_MAX] = "UNRECOGNIZED EC", 419 [ESR_ELx_EC_UNKNOWN] = "Unknown/Uncategorized", 420 [ESR_ELx_EC_WFx] = "WFI/WFE", 421 [ESR_ELx_EC_CP15_32] = "CP15 MCR/MRC", 422 [ESR_ELx_EC_CP15_64] = "CP15 MCRR/MRRC", 423 [ESR_ELx_EC_CP14_MR] = "CP14 MCR/MRC", 424 [ESR_ELx_EC_CP14_LS] = "CP14 LDC/STC", 425 [ESR_ELx_EC_FP_ASIMD] = "ASIMD", 426 [ESR_ELx_EC_CP10_ID] = "CP10 MRC/VMRS", 427 [ESR_ELx_EC_CP14_64] = "CP14 MCRR/MRRC", 428 [ESR_ELx_EC_ILL] = "PSTATE.IL", 429 [ESR_ELx_EC_SVC32] = "SVC (AArch32)", 430 [ESR_ELx_EC_HVC32] = "HVC (AArch32)", 431 [ESR_ELx_EC_SMC32] = "SMC (AArch32)", 432 [ESR_ELx_EC_SVC64] = "SVC (AArch64)", 433 [ESR_ELx_EC_HVC64] = "HVC (AArch64)", 434 [ESR_ELx_EC_SMC64] = "SMC (AArch64)", 435 [ESR_ELx_EC_SYS64] = "MSR/MRS (AArch64)", 436 [ESR_ELx_EC_IMP_DEF] = "EL3 IMP DEF", 437 [ESR_ELx_EC_IABT_LOW] = "IABT (lower EL)", 438 [ESR_ELx_EC_IABT_CUR] = "IABT (current EL)", 439 [ESR_ELx_EC_PC_ALIGN] = "PC Alignment", 440 [ESR_ELx_EC_DABT_LOW] = "DABT (lower EL)", 441 [ESR_ELx_EC_DABT_CUR] = "DABT (current EL)", 442 [ESR_ELx_EC_SP_ALIGN] = "SP Alignment", 443 [ESR_ELx_EC_FP_EXC32] = "FP (AArch32)", 444 [ESR_ELx_EC_FP_EXC64] = "FP (AArch64)", 445 [ESR_ELx_EC_SERROR] = "SError", 446 [ESR_ELx_EC_BREAKPT_LOW] = "Breakpoint (lower EL)", 447 [ESR_ELx_EC_BREAKPT_CUR] = "Breakpoint (current EL)", 448 [ESR_ELx_EC_SOFTSTP_LOW] = "Software Step (lower EL)", 449 [ESR_ELx_EC_SOFTSTP_CUR] = "Software Step (current EL)", 450 [ESR_ELx_EC_WATCHPT_LOW] = "Watchpoint (lower EL)", 451 [ESR_ELx_EC_WATCHPT_CUR] = "Watchpoint (current EL)", 452 [ESR_ELx_EC_BKPT32] = "BKPT (AArch32)", 453 [ESR_ELx_EC_VECTOR32] = "Vector catch (AArch32)", 454 [ESR_ELx_EC_BRK64] = "BRK (AArch64)", 455 }; 456 457 const char *esr_get_class_string(u32 esr) 458 { 459 return esr_class_str[esr >> ESR_ELx_EC_SHIFT]; 460 } 461 462 /* 463 * bad_mode handles the impossible case in the exception vector. 464 */ 465 asmlinkage void bad_mode(struct pt_regs *regs, int reason, unsigned int esr) 466 { 467 siginfo_t info; 468 void __user *pc = (void __user *)instruction_pointer(regs); 469 console_verbose(); 470 471 pr_crit("Bad mode in %s handler detected, code 0x%08x -- %s\n", 472 handler[reason], esr, esr_get_class_string(esr)); 473 __show_regs(regs); 474 475 info.si_signo = SIGILL; 476 info.si_errno = 0; 477 info.si_code = ILL_ILLOPC; 478 info.si_addr = pc; 479 480 arm64_notify_die("Oops - bad mode", regs, &info, 0); 481 } 482 483 void __pte_error(const char *file, int line, unsigned long val) 484 { 485 pr_err("%s:%d: bad pte %016lx.\n", file, line, val); 486 } 487 488 void __pmd_error(const char *file, int line, unsigned long val) 489 { 490 pr_err("%s:%d: bad pmd %016lx.\n", file, line, val); 491 } 492 493 void __pud_error(const char *file, int line, unsigned long val) 494 { 495 pr_err("%s:%d: bad pud %016lx.\n", file, line, val); 496 } 497 498 void __pgd_error(const char *file, int line, unsigned long val) 499 { 500 pr_err("%s:%d: bad pgd %016lx.\n", file, line, val); 501 } 502 503 /* GENERIC_BUG traps */ 504 505 int is_valid_bugaddr(unsigned long addr) 506 { 507 /* 508 * bug_handler() only called for BRK #BUG_BRK_IMM. 509 * So the answer is trivial -- any spurious instances with no 510 * bug table entry will be rejected by report_bug() and passed 511 * back to the debug-monitors code and handled as a fatal 512 * unexpected debug exception. 513 */ 514 return 1; 515 } 516 517 static int bug_handler(struct pt_regs *regs, unsigned int esr) 518 { 519 if (user_mode(regs)) 520 return DBG_HOOK_ERROR; 521 522 switch (report_bug(regs->pc, regs)) { 523 case BUG_TRAP_TYPE_BUG: 524 die("Oops - BUG", regs, 0); 525 break; 526 527 case BUG_TRAP_TYPE_WARN: 528 /* Ideally, report_bug() should backtrace for us... but no. */ 529 dump_backtrace(regs, NULL); 530 break; 531 532 default: 533 /* unknown/unrecognised bug trap type */ 534 return DBG_HOOK_ERROR; 535 } 536 537 /* If thread survives, skip over the BUG instruction and continue: */ 538 regs->pc += AARCH64_INSN_SIZE; /* skip BRK and resume */ 539 return DBG_HOOK_HANDLED; 540 } 541 542 static struct break_hook bug_break_hook = { 543 .esr_val = 0xf2000000 | BUG_BRK_IMM, 544 .esr_mask = 0xffffffff, 545 .fn = bug_handler, 546 }; 547 548 /* 549 * Initial handler for AArch64 BRK exceptions 550 * This handler only used until debug_traps_init(). 551 */ 552 int __init early_brk64(unsigned long addr, unsigned int esr, 553 struct pt_regs *regs) 554 { 555 return bug_handler(regs, esr) != DBG_HOOK_HANDLED; 556 } 557 558 /* This registration must happen early, before debug_traps_init(). */ 559 void __init trap_init(void) 560 { 561 register_break_hook(&bug_break_hook); 562 } 563