1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * Kernel Probes (KProbes) 4 * 5 * Copyright IBM Corp. 2002, 2006 6 * 7 * s390 port, used ppc64 as template. Mike Grundy <grundym@us.ibm.com> 8 */ 9 10 #include <linux/kprobes.h> 11 #include <linux/ptrace.h> 12 #include <linux/preempt.h> 13 #include <linux/stop_machine.h> 14 #include <linux/kdebug.h> 15 #include <linux/uaccess.h> 16 #include <linux/extable.h> 17 #include <linux/module.h> 18 #include <linux/slab.h> 19 #include <linux/hardirq.h> 20 #include <linux/ftrace.h> 21 #include <asm/set_memory.h> 22 #include <asm/sections.h> 23 #include <asm/dis.h> 24 25 DEFINE_PER_CPU(struct kprobe *, current_kprobe); 26 DEFINE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk); 27 28 struct kretprobe_blackpoint kretprobe_blacklist[] = { }; 29 30 DEFINE_INSN_CACHE_OPS(s390_insn); 31 32 static int insn_page_in_use; 33 static char insn_page[PAGE_SIZE] __aligned(PAGE_SIZE); 34 35 static void *alloc_s390_insn_page(void) 36 { 37 if (xchg(&insn_page_in_use, 1) == 1) 38 return NULL; 39 set_memory_x((unsigned long) &insn_page, 1); 40 return &insn_page; 41 } 42 43 static void free_s390_insn_page(void *page) 44 { 45 set_memory_nx((unsigned long) page, 1); 46 xchg(&insn_page_in_use, 0); 47 } 48 49 struct kprobe_insn_cache kprobe_s390_insn_slots = { 50 .mutex = __MUTEX_INITIALIZER(kprobe_s390_insn_slots.mutex), 51 .alloc = alloc_s390_insn_page, 52 .free = free_s390_insn_page, 53 .pages = LIST_HEAD_INIT(kprobe_s390_insn_slots.pages), 54 .insn_size = MAX_INSN_SIZE, 55 }; 56 57 static void copy_instruction(struct kprobe *p) 58 { 59 unsigned long ip = (unsigned long) p->addr; 60 s64 disp, new_disp; 61 u64 addr, new_addr; 62 63 if (ftrace_location(ip) == ip) { 64 /* 65 * If kprobes patches the instruction that is morphed by 66 * ftrace make sure that kprobes always sees the branch 67 * "jg .+24" that skips the mcount block or the "brcl 0,0" 68 * in case of hotpatch. 69 */ 70 ftrace_generate_nop_insn((struct ftrace_insn *)p->ainsn.insn); 71 p->ainsn.is_ftrace_insn = 1; 72 } else 73 memcpy(p->ainsn.insn, p->addr, insn_length(*p->addr >> 8)); 74 p->opcode = p->ainsn.insn[0]; 75 if (!probe_is_insn_relative_long(p->ainsn.insn)) 76 return; 77 /* 78 * For pc-relative instructions in RIL-b or RIL-c format patch the 79 * RI2 displacement field. We have already made sure that the insn 80 * slot for the patched instruction is within the same 2GB area 81 * as the original instruction (either kernel image or module area). 82 * Therefore the new displacement will always fit. 83 */ 84 disp = *(s32 *)&p->ainsn.insn[1]; 85 addr = (u64)(unsigned long)p->addr; 86 new_addr = (u64)(unsigned long)p->ainsn.insn; 87 new_disp = ((addr + (disp * 2)) - new_addr) / 2; 88 *(s32 *)&p->ainsn.insn[1] = new_disp; 89 } 90 NOKPROBE_SYMBOL(copy_instruction); 91 92 static inline int is_kernel_addr(void *addr) 93 { 94 return addr < (void *)_end; 95 } 96 97 static int s390_get_insn_slot(struct kprobe *p) 98 { 99 /* 100 * Get an insn slot that is within the same 2GB area like the original 101 * instruction. That way instructions with a 32bit signed displacement 102 * field can be patched and executed within the insn slot. 103 */ 104 p->ainsn.insn = NULL; 105 if (is_kernel_addr(p->addr)) 106 p->ainsn.insn = get_s390_insn_slot(); 107 else if (is_module_addr(p->addr)) 108 p->ainsn.insn = get_insn_slot(); 109 return p->ainsn.insn ? 0 : -ENOMEM; 110 } 111 NOKPROBE_SYMBOL(s390_get_insn_slot); 112 113 static void s390_free_insn_slot(struct kprobe *p) 114 { 115 if (!p->ainsn.insn) 116 return; 117 if (is_kernel_addr(p->addr)) 118 free_s390_insn_slot(p->ainsn.insn, 0); 119 else 120 free_insn_slot(p->ainsn.insn, 0); 121 p->ainsn.insn = NULL; 122 } 123 NOKPROBE_SYMBOL(s390_free_insn_slot); 124 125 int arch_prepare_kprobe(struct kprobe *p) 126 { 127 if ((unsigned long) p->addr & 0x01) 128 return -EINVAL; 129 /* Make sure the probe isn't going on a difficult instruction */ 130 if (probe_is_prohibited_opcode(p->addr)) 131 return -EINVAL; 132 if (s390_get_insn_slot(p)) 133 return -ENOMEM; 134 copy_instruction(p); 135 return 0; 136 } 137 NOKPROBE_SYMBOL(arch_prepare_kprobe); 138 139 int arch_check_ftrace_location(struct kprobe *p) 140 { 141 return 0; 142 } 143 144 struct swap_insn_args { 145 struct kprobe *p; 146 unsigned int arm_kprobe : 1; 147 }; 148 149 static int swap_instruction(void *data) 150 { 151 struct swap_insn_args *args = data; 152 struct ftrace_insn new_insn, *insn; 153 struct kprobe *p = args->p; 154 size_t len; 155 156 new_insn.opc = args->arm_kprobe ? BREAKPOINT_INSTRUCTION : p->opcode; 157 len = sizeof(new_insn.opc); 158 if (!p->ainsn.is_ftrace_insn) 159 goto skip_ftrace; 160 len = sizeof(new_insn); 161 insn = (struct ftrace_insn *) p->addr; 162 if (args->arm_kprobe) { 163 if (is_ftrace_nop(insn)) 164 new_insn.disp = KPROBE_ON_FTRACE_NOP; 165 else 166 new_insn.disp = KPROBE_ON_FTRACE_CALL; 167 } else { 168 ftrace_generate_call_insn(&new_insn, (unsigned long)p->addr); 169 if (insn->disp == KPROBE_ON_FTRACE_NOP) 170 ftrace_generate_nop_insn(&new_insn); 171 } 172 skip_ftrace: 173 s390_kernel_write(p->addr, &new_insn, len); 174 return 0; 175 } 176 NOKPROBE_SYMBOL(swap_instruction); 177 178 void arch_arm_kprobe(struct kprobe *p) 179 { 180 struct swap_insn_args args = {.p = p, .arm_kprobe = 1}; 181 182 stop_machine_cpuslocked(swap_instruction, &args, NULL); 183 } 184 NOKPROBE_SYMBOL(arch_arm_kprobe); 185 186 void arch_disarm_kprobe(struct kprobe *p) 187 { 188 struct swap_insn_args args = {.p = p, .arm_kprobe = 0}; 189 190 stop_machine_cpuslocked(swap_instruction, &args, NULL); 191 } 192 NOKPROBE_SYMBOL(arch_disarm_kprobe); 193 194 void arch_remove_kprobe(struct kprobe *p) 195 { 196 s390_free_insn_slot(p); 197 } 198 NOKPROBE_SYMBOL(arch_remove_kprobe); 199 200 static void enable_singlestep(struct kprobe_ctlblk *kcb, 201 struct pt_regs *regs, 202 unsigned long ip) 203 { 204 struct per_regs per_kprobe; 205 206 /* Set up the PER control registers %cr9-%cr11 */ 207 per_kprobe.control = PER_EVENT_IFETCH; 208 per_kprobe.start = ip; 209 per_kprobe.end = ip; 210 211 /* Save control regs and psw mask */ 212 __ctl_store(kcb->kprobe_saved_ctl, 9, 11); 213 kcb->kprobe_saved_imask = regs->psw.mask & 214 (PSW_MASK_PER | PSW_MASK_IO | PSW_MASK_EXT); 215 216 /* Set PER control regs, turns on single step for the given address */ 217 __ctl_load(per_kprobe, 9, 11); 218 regs->psw.mask |= PSW_MASK_PER; 219 regs->psw.mask &= ~(PSW_MASK_IO | PSW_MASK_EXT); 220 regs->psw.addr = ip; 221 } 222 NOKPROBE_SYMBOL(enable_singlestep); 223 224 static void disable_singlestep(struct kprobe_ctlblk *kcb, 225 struct pt_regs *regs, 226 unsigned long ip) 227 { 228 /* Restore control regs and psw mask, set new psw address */ 229 __ctl_load(kcb->kprobe_saved_ctl, 9, 11); 230 regs->psw.mask &= ~PSW_MASK_PER; 231 regs->psw.mask |= kcb->kprobe_saved_imask; 232 regs->psw.addr = ip; 233 } 234 NOKPROBE_SYMBOL(disable_singlestep); 235 236 /* 237 * Activate a kprobe by storing its pointer to current_kprobe. The 238 * previous kprobe is stored in kcb->prev_kprobe. A stack of up to 239 * two kprobes can be active, see KPROBE_REENTER. 240 */ 241 static void push_kprobe(struct kprobe_ctlblk *kcb, struct kprobe *p) 242 { 243 kcb->prev_kprobe.kp = __this_cpu_read(current_kprobe); 244 kcb->prev_kprobe.status = kcb->kprobe_status; 245 __this_cpu_write(current_kprobe, p); 246 } 247 NOKPROBE_SYMBOL(push_kprobe); 248 249 /* 250 * Deactivate a kprobe by backing up to the previous state. If the 251 * current state is KPROBE_REENTER prev_kprobe.kp will be non-NULL, 252 * for any other state prev_kprobe.kp will be NULL. 253 */ 254 static void pop_kprobe(struct kprobe_ctlblk *kcb) 255 { 256 __this_cpu_write(current_kprobe, kcb->prev_kprobe.kp); 257 kcb->kprobe_status = kcb->prev_kprobe.status; 258 } 259 NOKPROBE_SYMBOL(pop_kprobe); 260 261 void arch_prepare_kretprobe(struct kretprobe_instance *ri, struct pt_regs *regs) 262 { 263 ri->ret_addr = (kprobe_opcode_t *) regs->gprs[14]; 264 265 /* Replace the return addr with trampoline addr */ 266 regs->gprs[14] = (unsigned long) &kretprobe_trampoline; 267 } 268 NOKPROBE_SYMBOL(arch_prepare_kretprobe); 269 270 static void kprobe_reenter_check(struct kprobe_ctlblk *kcb, struct kprobe *p) 271 { 272 switch (kcb->kprobe_status) { 273 case KPROBE_HIT_SSDONE: 274 case KPROBE_HIT_ACTIVE: 275 kprobes_inc_nmissed_count(p); 276 break; 277 case KPROBE_HIT_SS: 278 case KPROBE_REENTER: 279 default: 280 /* 281 * A kprobe on the code path to single step an instruction 282 * is a BUG. The code path resides in the .kprobes.text 283 * section and is executed with interrupts disabled. 284 */ 285 pr_err("Invalid kprobe detected.\n"); 286 dump_kprobe(p); 287 BUG(); 288 } 289 } 290 NOKPROBE_SYMBOL(kprobe_reenter_check); 291 292 static int kprobe_handler(struct pt_regs *regs) 293 { 294 struct kprobe_ctlblk *kcb; 295 struct kprobe *p; 296 297 /* 298 * We want to disable preemption for the entire duration of kprobe 299 * processing. That includes the calls to the pre/post handlers 300 * and single stepping the kprobe instruction. 301 */ 302 preempt_disable(); 303 kcb = get_kprobe_ctlblk(); 304 p = get_kprobe((void *)(regs->psw.addr - 2)); 305 306 if (p) { 307 if (kprobe_running()) { 308 /* 309 * We have hit a kprobe while another is still 310 * active. This can happen in the pre and post 311 * handler. Single step the instruction of the 312 * new probe but do not call any handler function 313 * of this secondary kprobe. 314 * push_kprobe and pop_kprobe saves and restores 315 * the currently active kprobe. 316 */ 317 kprobe_reenter_check(kcb, p); 318 push_kprobe(kcb, p); 319 kcb->kprobe_status = KPROBE_REENTER; 320 } else { 321 /* 322 * If we have no pre-handler or it returned 0, we 323 * continue with single stepping. If we have a 324 * pre-handler and it returned non-zero, it prepped 325 * for changing execution path, so get out doing 326 * nothing more here. 327 */ 328 push_kprobe(kcb, p); 329 kcb->kprobe_status = KPROBE_HIT_ACTIVE; 330 if (p->pre_handler && p->pre_handler(p, regs)) { 331 pop_kprobe(kcb); 332 preempt_enable_no_resched(); 333 return 1; 334 } 335 kcb->kprobe_status = KPROBE_HIT_SS; 336 } 337 enable_singlestep(kcb, regs, (unsigned long) p->ainsn.insn); 338 return 1; 339 } /* else: 340 * No kprobe at this address and no active kprobe. The trap has 341 * not been caused by a kprobe breakpoint. The race of breakpoint 342 * vs. kprobe remove does not exist because on s390 as we use 343 * stop_machine to arm/disarm the breakpoints. 344 */ 345 preempt_enable_no_resched(); 346 return 0; 347 } 348 NOKPROBE_SYMBOL(kprobe_handler); 349 350 /* 351 * Function return probe trampoline: 352 * - init_kprobes() establishes a probepoint here 353 * - When the probed function returns, this probe 354 * causes the handlers to fire 355 */ 356 static void __used kretprobe_trampoline_holder(void) 357 { 358 asm volatile(".global kretprobe_trampoline\n" 359 "kretprobe_trampoline: bcr 0,0\n"); 360 } 361 362 /* 363 * Called when the probe at kretprobe trampoline is hit 364 */ 365 static int trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs) 366 { 367 struct kretprobe_instance *ri; 368 struct hlist_head *head, empty_rp; 369 struct hlist_node *tmp; 370 unsigned long flags, orig_ret_address; 371 unsigned long trampoline_address; 372 kprobe_opcode_t *correct_ret_addr; 373 374 INIT_HLIST_HEAD(&empty_rp); 375 kretprobe_hash_lock(current, &head, &flags); 376 377 /* 378 * It is possible to have multiple instances associated with a given 379 * task either because an multiple functions in the call path 380 * have a return probe installed on them, and/or more than one return 381 * return probe was registered for a target function. 382 * 383 * We can handle this because: 384 * - instances are always inserted at the head of the list 385 * - when multiple return probes are registered for the same 386 * function, the first instance's ret_addr will point to the 387 * real return address, and all the rest will point to 388 * kretprobe_trampoline 389 */ 390 ri = NULL; 391 orig_ret_address = 0; 392 correct_ret_addr = NULL; 393 trampoline_address = (unsigned long) &kretprobe_trampoline; 394 hlist_for_each_entry_safe(ri, tmp, head, hlist) { 395 if (ri->task != current) 396 /* another task is sharing our hash bucket */ 397 continue; 398 399 orig_ret_address = (unsigned long) ri->ret_addr; 400 401 if (orig_ret_address != trampoline_address) 402 /* 403 * This is the real return address. Any other 404 * instances associated with this task are for 405 * other calls deeper on the call stack 406 */ 407 break; 408 } 409 410 kretprobe_assert(ri, orig_ret_address, trampoline_address); 411 412 correct_ret_addr = ri->ret_addr; 413 hlist_for_each_entry_safe(ri, tmp, head, hlist) { 414 if (ri->task != current) 415 /* another task is sharing our hash bucket */ 416 continue; 417 418 orig_ret_address = (unsigned long) ri->ret_addr; 419 420 if (ri->rp && ri->rp->handler) { 421 ri->ret_addr = correct_ret_addr; 422 ri->rp->handler(ri, regs); 423 } 424 425 recycle_rp_inst(ri, &empty_rp); 426 427 if (orig_ret_address != trampoline_address) 428 /* 429 * This is the real return address. Any other 430 * instances associated with this task are for 431 * other calls deeper on the call stack 432 */ 433 break; 434 } 435 436 regs->psw.addr = orig_ret_address; 437 438 kretprobe_hash_unlock(current, &flags); 439 440 hlist_for_each_entry_safe(ri, tmp, &empty_rp, hlist) { 441 hlist_del(&ri->hlist); 442 kfree(ri); 443 } 444 /* 445 * By returning a non-zero value, we are telling 446 * kprobe_handler() that we don't want the post_handler 447 * to run (and have re-enabled preemption) 448 */ 449 return 1; 450 } 451 NOKPROBE_SYMBOL(trampoline_probe_handler); 452 453 /* 454 * Called after single-stepping. p->addr is the address of the 455 * instruction whose first byte has been replaced by the "breakpoint" 456 * instruction. To avoid the SMP problems that can occur when we 457 * temporarily put back the original opcode to single-step, we 458 * single-stepped a copy of the instruction. The address of this 459 * copy is p->ainsn.insn. 460 */ 461 static void resume_execution(struct kprobe *p, struct pt_regs *regs) 462 { 463 struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); 464 unsigned long ip = regs->psw.addr; 465 int fixup = probe_get_fixup_type(p->ainsn.insn); 466 467 /* Check if the kprobes location is an enabled ftrace caller */ 468 if (p->ainsn.is_ftrace_insn) { 469 struct ftrace_insn *insn = (struct ftrace_insn *) p->addr; 470 struct ftrace_insn call_insn; 471 472 ftrace_generate_call_insn(&call_insn, (unsigned long) p->addr); 473 /* 474 * A kprobe on an enabled ftrace call site actually single 475 * stepped an unconditional branch (ftrace nop equivalent). 476 * Now we need to fixup things and pretend that a brasl r0,... 477 * was executed instead. 478 */ 479 if (insn->disp == KPROBE_ON_FTRACE_CALL) { 480 ip += call_insn.disp * 2 - MCOUNT_INSN_SIZE; 481 regs->gprs[0] = (unsigned long)p->addr + sizeof(*insn); 482 } 483 } 484 485 if (fixup & FIXUP_PSW_NORMAL) 486 ip += (unsigned long) p->addr - (unsigned long) p->ainsn.insn; 487 488 if (fixup & FIXUP_BRANCH_NOT_TAKEN) { 489 int ilen = insn_length(p->ainsn.insn[0] >> 8); 490 if (ip - (unsigned long) p->ainsn.insn == ilen) 491 ip = (unsigned long) p->addr + ilen; 492 } 493 494 if (fixup & FIXUP_RETURN_REGISTER) { 495 int reg = (p->ainsn.insn[0] & 0xf0) >> 4; 496 regs->gprs[reg] += (unsigned long) p->addr - 497 (unsigned long) p->ainsn.insn; 498 } 499 500 disable_singlestep(kcb, regs, ip); 501 } 502 NOKPROBE_SYMBOL(resume_execution); 503 504 static int post_kprobe_handler(struct pt_regs *regs) 505 { 506 struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); 507 struct kprobe *p = kprobe_running(); 508 509 if (!p) 510 return 0; 511 512 if (kcb->kprobe_status != KPROBE_REENTER && p->post_handler) { 513 kcb->kprobe_status = KPROBE_HIT_SSDONE; 514 p->post_handler(p, regs, 0); 515 } 516 517 resume_execution(p, regs); 518 pop_kprobe(kcb); 519 preempt_enable_no_resched(); 520 521 /* 522 * if somebody else is singlestepping across a probe point, psw mask 523 * will have PER set, in which case, continue the remaining processing 524 * of do_single_step, as if this is not a probe hit. 525 */ 526 if (regs->psw.mask & PSW_MASK_PER) 527 return 0; 528 529 return 1; 530 } 531 NOKPROBE_SYMBOL(post_kprobe_handler); 532 533 static int kprobe_trap_handler(struct pt_regs *regs, int trapnr) 534 { 535 struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); 536 struct kprobe *p = kprobe_running(); 537 const struct exception_table_entry *entry; 538 539 switch(kcb->kprobe_status) { 540 case KPROBE_HIT_SS: 541 case KPROBE_REENTER: 542 /* 543 * We are here because the instruction being single 544 * stepped caused a page fault. We reset the current 545 * kprobe and the nip points back to the probe address 546 * and allow the page fault handler to continue as a 547 * normal page fault. 548 */ 549 disable_singlestep(kcb, regs, (unsigned long) p->addr); 550 pop_kprobe(kcb); 551 preempt_enable_no_resched(); 552 break; 553 case KPROBE_HIT_ACTIVE: 554 case KPROBE_HIT_SSDONE: 555 /* 556 * We increment the nmissed count for accounting, 557 * we can also use npre/npostfault count for accounting 558 * these specific fault cases. 559 */ 560 kprobes_inc_nmissed_count(p); 561 562 /* 563 * We come here because instructions in the pre/post 564 * handler caused the page_fault, this could happen 565 * if handler tries to access user space by 566 * copy_from_user(), get_user() etc. Let the 567 * user-specified handler try to fix it first. 568 */ 569 if (p->fault_handler && p->fault_handler(p, regs, trapnr)) 570 return 1; 571 572 /* 573 * In case the user-specified fault handler returned 574 * zero, try to fix up. 575 */ 576 entry = s390_search_extables(regs->psw.addr); 577 if (entry) { 578 regs->psw.addr = extable_fixup(entry); 579 return 1; 580 } 581 582 /* 583 * fixup_exception() could not handle it, 584 * Let do_page_fault() fix it. 585 */ 586 break; 587 default: 588 break; 589 } 590 return 0; 591 } 592 NOKPROBE_SYMBOL(kprobe_trap_handler); 593 594 int kprobe_fault_handler(struct pt_regs *regs, int trapnr) 595 { 596 int ret; 597 598 if (regs->psw.mask & (PSW_MASK_IO | PSW_MASK_EXT)) 599 local_irq_disable(); 600 ret = kprobe_trap_handler(regs, trapnr); 601 if (regs->psw.mask & (PSW_MASK_IO | PSW_MASK_EXT)) 602 local_irq_restore(regs->psw.mask & ~PSW_MASK_PER); 603 return ret; 604 } 605 NOKPROBE_SYMBOL(kprobe_fault_handler); 606 607 /* 608 * Wrapper routine to for handling exceptions. 609 */ 610 int kprobe_exceptions_notify(struct notifier_block *self, 611 unsigned long val, void *data) 612 { 613 struct die_args *args = (struct die_args *) data; 614 struct pt_regs *regs = args->regs; 615 int ret = NOTIFY_DONE; 616 617 if (regs->psw.mask & (PSW_MASK_IO | PSW_MASK_EXT)) 618 local_irq_disable(); 619 620 switch (val) { 621 case DIE_BPT: 622 if (kprobe_handler(regs)) 623 ret = NOTIFY_STOP; 624 break; 625 case DIE_SSTEP: 626 if (post_kprobe_handler(regs)) 627 ret = NOTIFY_STOP; 628 break; 629 case DIE_TRAP: 630 if (!preemptible() && kprobe_running() && 631 kprobe_trap_handler(regs, args->trapnr)) 632 ret = NOTIFY_STOP; 633 break; 634 default: 635 break; 636 } 637 638 if (regs->psw.mask & (PSW_MASK_IO | PSW_MASK_EXT)) 639 local_irq_restore(regs->psw.mask & ~PSW_MASK_PER); 640 641 return ret; 642 } 643 NOKPROBE_SYMBOL(kprobe_exceptions_notify); 644 645 static struct kprobe trampoline = { 646 .addr = (kprobe_opcode_t *) &kretprobe_trampoline, 647 .pre_handler = trampoline_probe_handler 648 }; 649 650 int __init arch_init_kprobes(void) 651 { 652 return register_kprobe(&trampoline); 653 } 654 655 int arch_trampoline_kprobe(struct kprobe *p) 656 { 657 return p->addr == (kprobe_opcode_t *) &kretprobe_trampoline; 658 } 659 NOKPROBE_SYMBOL(arch_trampoline_kprobe); 660