1 /* arch/sparc64/kernel/kprobes.c 2 * 3 * Copyright (C) 2004 David S. Miller <davem@davemloft.net> 4 */ 5 6 #include <linux/kernel.h> 7 #include <linux/kprobes.h> 8 #include <linux/module.h> 9 #include <linux/kdebug.h> 10 #include <linux/slab.h> 11 #include <linux/context_tracking.h> 12 #include <asm/signal.h> 13 #include <asm/cacheflush.h> 14 #include <asm/uaccess.h> 15 16 /* We do not have hardware single-stepping on sparc64. 17 * So we implement software single-stepping with breakpoint 18 * traps. The top-level scheme is similar to that used 19 * in the x86 kprobes implementation. 20 * 21 * In the kprobe->ainsn.insn[] array we store the original 22 * instruction at index zero and a break instruction at 23 * index one. 24 * 25 * When we hit a kprobe we: 26 * - Run the pre-handler 27 * - Remember "regs->tnpc" and interrupt level stored in 28 * "regs->tstate" so we can restore them later 29 * - Disable PIL interrupts 30 * - Set regs->tpc to point to kprobe->ainsn.insn[0] 31 * - Set regs->tnpc to point to kprobe->ainsn.insn[1] 32 * - Mark that we are actively in a kprobe 33 * 34 * At this point we wait for the second breakpoint at 35 * kprobe->ainsn.insn[1] to hit. When it does we: 36 * - Run the post-handler 37 * - Set regs->tpc to "remembered" regs->tnpc stored above, 38 * restore the PIL interrupt level in "regs->tstate" as well 39 * - Make any adjustments necessary to regs->tnpc in order 40 * to handle relative branches correctly. See below. 41 * - Mark that we are no longer actively in a kprobe. 42 */ 43 44 DEFINE_PER_CPU(struct kprobe *, current_kprobe) = NULL; 45 DEFINE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk); 46 47 struct kretprobe_blackpoint kretprobe_blacklist[] = {{NULL, NULL}}; 48 49 int __kprobes arch_prepare_kprobe(struct kprobe *p) 50 { 51 if ((unsigned long) p->addr & 0x3UL) 52 return -EILSEQ; 53 54 p->ainsn.insn[0] = *p->addr; 55 flushi(&p->ainsn.insn[0]); 56 57 p->ainsn.insn[1] = BREAKPOINT_INSTRUCTION_2; 58 flushi(&p->ainsn.insn[1]); 59 60 p->opcode = *p->addr; 61 return 0; 62 } 63 64 void __kprobes arch_arm_kprobe(struct kprobe *p) 65 { 66 *p->addr = BREAKPOINT_INSTRUCTION; 67 flushi(p->addr); 68 } 69 70 void __kprobes arch_disarm_kprobe(struct kprobe *p) 71 { 72 *p->addr = p->opcode; 73 flushi(p->addr); 74 } 75 76 static void __kprobes save_previous_kprobe(struct kprobe_ctlblk *kcb) 77 { 78 kcb->prev_kprobe.kp = kprobe_running(); 79 kcb->prev_kprobe.status = kcb->kprobe_status; 80 kcb->prev_kprobe.orig_tnpc = kcb->kprobe_orig_tnpc; 81 kcb->prev_kprobe.orig_tstate_pil = kcb->kprobe_orig_tstate_pil; 82 } 83 84 static void __kprobes restore_previous_kprobe(struct kprobe_ctlblk *kcb) 85 { 86 __get_cpu_var(current_kprobe) = kcb->prev_kprobe.kp; 87 kcb->kprobe_status = kcb->prev_kprobe.status; 88 kcb->kprobe_orig_tnpc = kcb->prev_kprobe.orig_tnpc; 89 kcb->kprobe_orig_tstate_pil = kcb->prev_kprobe.orig_tstate_pil; 90 } 91 92 static void __kprobes set_current_kprobe(struct kprobe *p, struct pt_regs *regs, 93 struct kprobe_ctlblk *kcb) 94 { 95 __get_cpu_var(current_kprobe) = p; 96 kcb->kprobe_orig_tnpc = regs->tnpc; 97 kcb->kprobe_orig_tstate_pil = (regs->tstate & TSTATE_PIL); 98 } 99 100 static void __kprobes prepare_singlestep(struct kprobe *p, struct pt_regs *regs, 101 struct kprobe_ctlblk *kcb) 102 { 103 regs->tstate |= TSTATE_PIL; 104 105 /*single step inline, if it a breakpoint instruction*/ 106 if (p->opcode == BREAKPOINT_INSTRUCTION) { 107 regs->tpc = (unsigned long) p->addr; 108 regs->tnpc = kcb->kprobe_orig_tnpc; 109 } else { 110 regs->tpc = (unsigned long) &p->ainsn.insn[0]; 111 regs->tnpc = (unsigned long) &p->ainsn.insn[1]; 112 } 113 } 114 115 static int __kprobes kprobe_handler(struct pt_regs *regs) 116 { 117 struct kprobe *p; 118 void *addr = (void *) regs->tpc; 119 int ret = 0; 120 struct kprobe_ctlblk *kcb; 121 122 /* 123 * We don't want to be preempted for the entire 124 * duration of kprobe processing 125 */ 126 preempt_disable(); 127 kcb = get_kprobe_ctlblk(); 128 129 if (kprobe_running()) { 130 p = get_kprobe(addr); 131 if (p) { 132 if (kcb->kprobe_status == KPROBE_HIT_SS) { 133 regs->tstate = ((regs->tstate & ~TSTATE_PIL) | 134 kcb->kprobe_orig_tstate_pil); 135 goto no_kprobe; 136 } 137 /* We have reentered the kprobe_handler(), since 138 * another probe was hit while within the handler. 139 * We here save the original kprobes variables and 140 * just single step on the instruction of the new probe 141 * without calling any user handlers. 142 */ 143 save_previous_kprobe(kcb); 144 set_current_kprobe(p, regs, kcb); 145 kprobes_inc_nmissed_count(p); 146 kcb->kprobe_status = KPROBE_REENTER; 147 prepare_singlestep(p, regs, kcb); 148 return 1; 149 } else { 150 if (*(u32 *)addr != BREAKPOINT_INSTRUCTION) { 151 /* The breakpoint instruction was removed by 152 * another cpu right after we hit, no further 153 * handling of this interrupt is appropriate 154 */ 155 ret = 1; 156 goto no_kprobe; 157 } 158 p = __get_cpu_var(current_kprobe); 159 if (p->break_handler && p->break_handler(p, regs)) 160 goto ss_probe; 161 } 162 goto no_kprobe; 163 } 164 165 p = get_kprobe(addr); 166 if (!p) { 167 if (*(u32 *)addr != BREAKPOINT_INSTRUCTION) { 168 /* 169 * The breakpoint instruction was removed right 170 * after we hit it. Another cpu has removed 171 * either a probepoint or a debugger breakpoint 172 * at this address. In either case, no further 173 * handling of this interrupt is appropriate. 174 */ 175 ret = 1; 176 } 177 /* Not one of ours: let kernel handle it */ 178 goto no_kprobe; 179 } 180 181 set_current_kprobe(p, regs, kcb); 182 kcb->kprobe_status = KPROBE_HIT_ACTIVE; 183 if (p->pre_handler && p->pre_handler(p, regs)) 184 return 1; 185 186 ss_probe: 187 prepare_singlestep(p, regs, kcb); 188 kcb->kprobe_status = KPROBE_HIT_SS; 189 return 1; 190 191 no_kprobe: 192 preempt_enable_no_resched(); 193 return ret; 194 } 195 196 /* If INSN is a relative control transfer instruction, 197 * return the corrected branch destination value. 198 * 199 * regs->tpc and regs->tnpc still hold the values of the 200 * program counters at the time of trap due to the execution 201 * of the BREAKPOINT_INSTRUCTION_2 at p->ainsn.insn[1] 202 * 203 */ 204 static unsigned long __kprobes relbranch_fixup(u32 insn, struct kprobe *p, 205 struct pt_regs *regs) 206 { 207 unsigned long real_pc = (unsigned long) p->addr; 208 209 /* Branch not taken, no mods necessary. */ 210 if (regs->tnpc == regs->tpc + 0x4UL) 211 return real_pc + 0x8UL; 212 213 /* The three cases are call, branch w/prediction, 214 * and traditional branch. 215 */ 216 if ((insn & 0xc0000000) == 0x40000000 || 217 (insn & 0xc1c00000) == 0x00400000 || 218 (insn & 0xc1c00000) == 0x00800000) { 219 unsigned long ainsn_addr; 220 221 ainsn_addr = (unsigned long) &p->ainsn.insn[0]; 222 223 /* The instruction did all the work for us 224 * already, just apply the offset to the correct 225 * instruction location. 226 */ 227 return (real_pc + (regs->tnpc - ainsn_addr)); 228 } 229 230 /* It is jmpl or some other absolute PC modification instruction, 231 * leave NPC as-is. 232 */ 233 return regs->tnpc; 234 } 235 236 /* If INSN is an instruction which writes it's PC location 237 * into a destination register, fix that up. 238 */ 239 static void __kprobes retpc_fixup(struct pt_regs *regs, u32 insn, 240 unsigned long real_pc) 241 { 242 unsigned long *slot = NULL; 243 244 /* Simplest case is 'call', which always uses %o7 */ 245 if ((insn & 0xc0000000) == 0x40000000) { 246 slot = ®s->u_regs[UREG_I7]; 247 } 248 249 /* 'jmpl' encodes the register inside of the opcode */ 250 if ((insn & 0xc1f80000) == 0x81c00000) { 251 unsigned long rd = ((insn >> 25) & 0x1f); 252 253 if (rd <= 15) { 254 slot = ®s->u_regs[rd]; 255 } else { 256 /* Hard case, it goes onto the stack. */ 257 flushw_all(); 258 259 rd -= 16; 260 slot = (unsigned long *) 261 (regs->u_regs[UREG_FP] + STACK_BIAS); 262 slot += rd; 263 } 264 } 265 if (slot != NULL) 266 *slot = real_pc; 267 } 268 269 /* 270 * Called after single-stepping. p->addr is the address of the 271 * instruction which has been replaced by the breakpoint 272 * instruction. To avoid the SMP problems that can occur when we 273 * temporarily put back the original opcode to single-step, we 274 * single-stepped a copy of the instruction. The address of this 275 * copy is &p->ainsn.insn[0]. 276 * 277 * This function prepares to return from the post-single-step 278 * breakpoint trap. 279 */ 280 static void __kprobes resume_execution(struct kprobe *p, 281 struct pt_regs *regs, struct kprobe_ctlblk *kcb) 282 { 283 u32 insn = p->ainsn.insn[0]; 284 285 regs->tnpc = relbranch_fixup(insn, p, regs); 286 287 /* This assignment must occur after relbranch_fixup() */ 288 regs->tpc = kcb->kprobe_orig_tnpc; 289 290 retpc_fixup(regs, insn, (unsigned long) p->addr); 291 292 regs->tstate = ((regs->tstate & ~TSTATE_PIL) | 293 kcb->kprobe_orig_tstate_pil); 294 } 295 296 static int __kprobes post_kprobe_handler(struct pt_regs *regs) 297 { 298 struct kprobe *cur = kprobe_running(); 299 struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); 300 301 if (!cur) 302 return 0; 303 304 if ((kcb->kprobe_status != KPROBE_REENTER) && cur->post_handler) { 305 kcb->kprobe_status = KPROBE_HIT_SSDONE; 306 cur->post_handler(cur, regs, 0); 307 } 308 309 resume_execution(cur, regs, kcb); 310 311 /*Restore back the original saved kprobes variables and continue. */ 312 if (kcb->kprobe_status == KPROBE_REENTER) { 313 restore_previous_kprobe(kcb); 314 goto out; 315 } 316 reset_current_kprobe(); 317 out: 318 preempt_enable_no_resched(); 319 320 return 1; 321 } 322 323 int __kprobes kprobe_fault_handler(struct pt_regs *regs, int trapnr) 324 { 325 struct kprobe *cur = kprobe_running(); 326 struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); 327 const struct exception_table_entry *entry; 328 329 switch(kcb->kprobe_status) { 330 case KPROBE_HIT_SS: 331 case KPROBE_REENTER: 332 /* 333 * We are here because the instruction being single 334 * stepped caused a page fault. We reset the current 335 * kprobe and the tpc points back to the probe address 336 * and allow the page fault handler to continue as a 337 * normal page fault. 338 */ 339 regs->tpc = (unsigned long)cur->addr; 340 regs->tnpc = kcb->kprobe_orig_tnpc; 341 regs->tstate = ((regs->tstate & ~TSTATE_PIL) | 342 kcb->kprobe_orig_tstate_pil); 343 if (kcb->kprobe_status == KPROBE_REENTER) 344 restore_previous_kprobe(kcb); 345 else 346 reset_current_kprobe(); 347 preempt_enable_no_resched(); 348 break; 349 case KPROBE_HIT_ACTIVE: 350 case KPROBE_HIT_SSDONE: 351 /* 352 * We increment the nmissed count for accounting, 353 * we can also use npre/npostfault count for accounting 354 * these specific fault cases. 355 */ 356 kprobes_inc_nmissed_count(cur); 357 358 /* 359 * We come here because instructions in the pre/post 360 * handler caused the page_fault, this could happen 361 * if handler tries to access user space by 362 * copy_from_user(), get_user() etc. Let the 363 * user-specified handler try to fix it first. 364 */ 365 if (cur->fault_handler && cur->fault_handler(cur, regs, trapnr)) 366 return 1; 367 368 /* 369 * In case the user-specified fault handler returned 370 * zero, try to fix up. 371 */ 372 373 entry = search_exception_tables(regs->tpc); 374 if (entry) { 375 regs->tpc = entry->fixup; 376 regs->tnpc = regs->tpc + 4; 377 return 1; 378 } 379 380 /* 381 * fixup_exception() could not handle it, 382 * Let do_page_fault() fix it. 383 */ 384 break; 385 default: 386 break; 387 } 388 389 return 0; 390 } 391 392 /* 393 * Wrapper routine to for handling exceptions. 394 */ 395 int __kprobes kprobe_exceptions_notify(struct notifier_block *self, 396 unsigned long val, void *data) 397 { 398 struct die_args *args = (struct die_args *)data; 399 int ret = NOTIFY_DONE; 400 401 if (args->regs && user_mode(args->regs)) 402 return ret; 403 404 switch (val) { 405 case DIE_DEBUG: 406 if (kprobe_handler(args->regs)) 407 ret = NOTIFY_STOP; 408 break; 409 case DIE_DEBUG_2: 410 if (post_kprobe_handler(args->regs)) 411 ret = NOTIFY_STOP; 412 break; 413 default: 414 break; 415 } 416 return ret; 417 } 418 419 asmlinkage void __kprobes kprobe_trap(unsigned long trap_level, 420 struct pt_regs *regs) 421 { 422 enum ctx_state prev_state = exception_enter(); 423 424 BUG_ON(trap_level != 0x170 && trap_level != 0x171); 425 426 if (user_mode(regs)) { 427 local_irq_enable(); 428 bad_trap(regs, trap_level); 429 goto out; 430 } 431 432 /* trap_level == 0x170 --> ta 0x70 433 * trap_level == 0x171 --> ta 0x71 434 */ 435 if (notify_die((trap_level == 0x170) ? DIE_DEBUG : DIE_DEBUG_2, 436 (trap_level == 0x170) ? "debug" : "debug_2", 437 regs, 0, trap_level, SIGTRAP) != NOTIFY_STOP) 438 bad_trap(regs, trap_level); 439 out: 440 exception_exit(prev_state); 441 } 442 443 /* Jprobes support. */ 444 int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs) 445 { 446 struct jprobe *jp = container_of(p, struct jprobe, kp); 447 struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); 448 449 memcpy(&(kcb->jprobe_saved_regs), regs, sizeof(*regs)); 450 451 regs->tpc = (unsigned long) jp->entry; 452 regs->tnpc = ((unsigned long) jp->entry) + 0x4UL; 453 regs->tstate |= TSTATE_PIL; 454 455 return 1; 456 } 457 458 void __kprobes jprobe_return(void) 459 { 460 struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); 461 register unsigned long orig_fp asm("g1"); 462 463 orig_fp = kcb->jprobe_saved_regs.u_regs[UREG_FP]; 464 __asm__ __volatile__("\n" 465 "1: cmp %%sp, %0\n\t" 466 "blu,a,pt %%xcc, 1b\n\t" 467 " restore\n\t" 468 ".globl jprobe_return_trap_instruction\n" 469 "jprobe_return_trap_instruction:\n\t" 470 "ta 0x70" 471 : /* no outputs */ 472 : "r" (orig_fp)); 473 } 474 475 extern void jprobe_return_trap_instruction(void); 476 477 int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs) 478 { 479 u32 *addr = (u32 *) regs->tpc; 480 struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); 481 482 if (addr == (u32 *) jprobe_return_trap_instruction) { 483 memcpy(regs, &(kcb->jprobe_saved_regs), sizeof(*regs)); 484 preempt_enable_no_resched(); 485 return 1; 486 } 487 return 0; 488 } 489 490 /* The value stored in the return address register is actually 2 491 * instructions before where the callee will return to. 492 * Sequences usually look something like this 493 * 494 * call some_function <--- return register points here 495 * nop <--- call delay slot 496 * whatever <--- where callee returns to 497 * 498 * To keep trampoline_probe_handler logic simpler, we normalize the 499 * value kept in ri->ret_addr so we don't need to keep adjusting it 500 * back and forth. 501 */ 502 void __kprobes arch_prepare_kretprobe(struct kretprobe_instance *ri, 503 struct pt_regs *regs) 504 { 505 ri->ret_addr = (kprobe_opcode_t *)(regs->u_regs[UREG_RETPC] + 8); 506 507 /* Replace the return addr with trampoline addr */ 508 regs->u_regs[UREG_RETPC] = 509 ((unsigned long)kretprobe_trampoline) - 8; 510 } 511 512 /* 513 * Called when the probe at kretprobe trampoline is hit 514 */ 515 int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs) 516 { 517 struct kretprobe_instance *ri = NULL; 518 struct hlist_head *head, empty_rp; 519 struct hlist_node *tmp; 520 unsigned long flags, orig_ret_address = 0; 521 unsigned long trampoline_address =(unsigned long)&kretprobe_trampoline; 522 523 INIT_HLIST_HEAD(&empty_rp); 524 kretprobe_hash_lock(current, &head, &flags); 525 526 /* 527 * It is possible to have multiple instances associated with a given 528 * task either because an multiple functions in the call path 529 * have a return probe installed on them, and/or more than one return 530 * return probe was registered for a target function. 531 * 532 * We can handle this because: 533 * - instances are always inserted at the head of the list 534 * - when multiple return probes are registered for the same 535 * function, the first instance's ret_addr will point to the 536 * real return address, and all the rest will point to 537 * kretprobe_trampoline 538 */ 539 hlist_for_each_entry_safe(ri, tmp, head, hlist) { 540 if (ri->task != current) 541 /* another task is sharing our hash bucket */ 542 continue; 543 544 if (ri->rp && ri->rp->handler) 545 ri->rp->handler(ri, regs); 546 547 orig_ret_address = (unsigned long)ri->ret_addr; 548 recycle_rp_inst(ri, &empty_rp); 549 550 if (orig_ret_address != trampoline_address) 551 /* 552 * This is the real return address. Any other 553 * instances associated with this task are for 554 * other calls deeper on the call stack 555 */ 556 break; 557 } 558 559 kretprobe_assert(ri, orig_ret_address, trampoline_address); 560 regs->tpc = orig_ret_address; 561 regs->tnpc = orig_ret_address + 4; 562 563 reset_current_kprobe(); 564 kretprobe_hash_unlock(current, &flags); 565 preempt_enable_no_resched(); 566 567 hlist_for_each_entry_safe(ri, tmp, &empty_rp, hlist) { 568 hlist_del(&ri->hlist); 569 kfree(ri); 570 } 571 /* 572 * By returning a non-zero value, we are telling 573 * kprobe_handler() that we don't want the post_handler 574 * to run (and have re-enabled preemption) 575 */ 576 return 1; 577 } 578 579 void kretprobe_trampoline_holder(void) 580 { 581 asm volatile(".global kretprobe_trampoline\n" 582 "kretprobe_trampoline:\n" 583 "\tnop\n" 584 "\tnop\n"); 585 } 586 static struct kprobe trampoline_p = { 587 .addr = (kprobe_opcode_t *) &kretprobe_trampoline, 588 .pre_handler = trampoline_probe_handler 589 }; 590 591 int __init arch_init_kprobes(void) 592 { 593 return register_kprobe(&trampoline_p); 594 } 595 596 int __kprobes arch_trampoline_kprobe(struct kprobe *p) 597 { 598 if (p->addr == (kprobe_opcode_t *)&kretprobe_trampoline) 599 return 1; 600 601 return 0; 602 } 603