linux/arch/powerpc/kernel/kprobes.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 *  Kernel Probes (KProbes)
   4 *
   5 * Copyright (C) IBM Corporation, 2002, 2004
   6 *
   7 * 2002-Oct     Created by Vamsi Krishna S <vamsi_krishna@in.ibm.com> Kernel
   8 *              Probes initial implementation ( includes contributions from
   9 *              Rusty Russell).
  10 * 2004-July    Suparna Bhattacharya <suparna@in.ibm.com> added jumper probes
  11 *              interface to access function arguments.
  12 * 2004-Nov     Ananth N Mavinakayanahalli <ananth@in.ibm.com> kprobes port
  13 *              for PPC64
  14 */
  15
  16#include <linux/kprobes.h>
  17#include <linux/ptrace.h>
  18#include <linux/preempt.h>
  19#include <linux/extable.h>
  20#include <linux/kdebug.h>
  21#include <linux/slab.h>
  22#include <asm/code-patching.h>
  23#include <asm/cacheflush.h>
  24#include <asm/sstep.h>
  25#include <asm/sections.h>
  26#include <linux/uaccess.h>
  27
  28DEFINE_PER_CPU(struct kprobe *, current_kprobe) = NULL;
  29DEFINE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk);
  30
  31struct kretprobe_blackpoint kretprobe_blacklist[] = {{NULL, NULL}};
  32
  33bool arch_within_kprobe_blacklist(unsigned long addr)
  34{
  35        return  (addr >= (unsigned long)__kprobes_text_start &&
  36                 addr < (unsigned long)__kprobes_text_end) ||
  37                (addr >= (unsigned long)_stext &&
  38                 addr < (unsigned long)__head_end);
  39}
  40
  41kprobe_opcode_t *kprobe_lookup_name(const char *name, unsigned int offset)
  42{
  43        kprobe_opcode_t *addr = NULL;
  44
  45#ifdef PPC64_ELF_ABI_v2
  46        /* PPC64 ABIv2 needs local entry point */
  47        addr = (kprobe_opcode_t *)kallsyms_lookup_name(name);
  48        if (addr && !offset) {
  49#ifdef CONFIG_KPROBES_ON_FTRACE
  50                unsigned long faddr;
  51                /*
  52                 * Per livepatch.h, ftrace location is always within the first
  53                 * 16 bytes of a function on powerpc with -mprofile-kernel.
  54                 */
  55                faddr = ftrace_location_range((unsigned long)addr,
  56                                              (unsigned long)addr + 16);
  57                if (faddr)
  58                        addr = (kprobe_opcode_t *)faddr;
  59                else
  60#endif
  61                        addr = (kprobe_opcode_t *)ppc_function_entry(addr);
  62        }
  63#elif defined(PPC64_ELF_ABI_v1)
  64        /*
  65         * 64bit powerpc ABIv1 uses function descriptors:
  66         * - Check for the dot variant of the symbol first.
  67         * - If that fails, try looking up the symbol provided.
  68         *
  69         * This ensures we always get to the actual symbol and not
  70         * the descriptor.
  71         *
  72         * Also handle <module:symbol> format.
  73         */
  74        char dot_name[MODULE_NAME_LEN + 1 + KSYM_NAME_LEN];
  75        bool dot_appended = false;
  76        const char *c;
  77        ssize_t ret = 0;
  78        int len = 0;
  79
  80        if ((c = strnchr(name, MODULE_NAME_LEN, ':')) != NULL) {
  81                c++;
  82                len = c - name;
  83                memcpy(dot_name, name, len);
  84        } else
  85                c = name;
  86
  87        if (*c != '\0' && *c != '.') {
  88                dot_name[len++] = '.';
  89                dot_appended = true;
  90        }
  91        ret = strscpy(dot_name + len, c, KSYM_NAME_LEN);
  92        if (ret > 0)
  93                addr = (kprobe_opcode_t *)kallsyms_lookup_name(dot_name);
  94
  95        /* Fallback to the original non-dot symbol lookup */
  96        if (!addr && dot_appended)
  97                addr = (kprobe_opcode_t *)kallsyms_lookup_name(name);
  98#else
  99        addr = (kprobe_opcode_t *)kallsyms_lookup_name(name);
 100#endif
 101
 102        return addr;
 103}
 104
 105int arch_prepare_kprobe(struct kprobe *p)
 106{
 107        int ret = 0;
 108        kprobe_opcode_t insn = *p->addr;
 109
 110        if ((unsigned long)p->addr & 0x03) {
 111                printk("Attempt to register kprobe at an unaligned address\n");
 112                ret = -EINVAL;
 113        } else if (IS_MTMSRD(insn) || IS_RFID(insn) || IS_RFI(insn)) {
 114                printk("Cannot register a kprobe on rfi/rfid or mtmsr[d]\n");
 115                ret = -EINVAL;
 116        }
 117
 118        /* insn must be on a special executable page on ppc64.  This is
 119         * not explicitly required on ppc32 (right now), but it doesn't hurt */
 120        if (!ret) {
 121                p->ainsn.insn = get_insn_slot();
 122                if (!p->ainsn.insn)
 123                        ret = -ENOMEM;
 124        }
 125
 126        if (!ret) {
 127                memcpy(p->ainsn.insn, p->addr,
 128                                MAX_INSN_SIZE * sizeof(kprobe_opcode_t));
 129                p->opcode = *p->addr;
 130                flush_icache_range((unsigned long)p->ainsn.insn,
 131                        (unsigned long)p->ainsn.insn + sizeof(kprobe_opcode_t));
 132        }
 133
 134        p->ainsn.boostable = 0;
 135        return ret;
 136}
 137NOKPROBE_SYMBOL(arch_prepare_kprobe);
 138
 139void arch_arm_kprobe(struct kprobe *p)
 140{
 141        patch_instruction(p->addr, BREAKPOINT_INSTRUCTION);
 142}
 143NOKPROBE_SYMBOL(arch_arm_kprobe);
 144
 145void arch_disarm_kprobe(struct kprobe *p)
 146{
 147        patch_instruction(p->addr, p->opcode);
 148}
 149NOKPROBE_SYMBOL(arch_disarm_kprobe);
 150
 151void arch_remove_kprobe(struct kprobe *p)
 152{
 153        if (p->ainsn.insn) {
 154                free_insn_slot(p->ainsn.insn, 0);
 155                p->ainsn.insn = NULL;
 156        }
 157}
 158NOKPROBE_SYMBOL(arch_remove_kprobe);
 159
 160static nokprobe_inline void prepare_singlestep(struct kprobe *p, struct pt_regs *regs)
 161{
 162        enable_single_step(regs);
 163
 164        /*
 165         * On powerpc we should single step on the original
 166         * instruction even if the probed insn is a trap
 167         * variant as values in regs could play a part in
 168         * if the trap is taken or not
 169         */
 170        regs->nip = (unsigned long)p->ainsn.insn;
 171}
 172
 173static nokprobe_inline void save_previous_kprobe(struct kprobe_ctlblk *kcb)
 174{
 175        kcb->prev_kprobe.kp = kprobe_running();
 176        kcb->prev_kprobe.status = kcb->kprobe_status;
 177        kcb->prev_kprobe.saved_msr = kcb->kprobe_saved_msr;
 178}
 179
 180static nokprobe_inline void restore_previous_kprobe(struct kprobe_ctlblk *kcb)
 181{
 182        __this_cpu_write(current_kprobe, kcb->prev_kprobe.kp);
 183        kcb->kprobe_status = kcb->prev_kprobe.status;
 184        kcb->kprobe_saved_msr = kcb->prev_kprobe.saved_msr;
 185}
 186
 187static nokprobe_inline void set_current_kprobe(struct kprobe *p, struct pt_regs *regs,
 188                                struct kprobe_ctlblk *kcb)
 189{
 190        __this_cpu_write(current_kprobe, p);
 191        kcb->kprobe_saved_msr = regs->msr;
 192}
 193
 194bool arch_kprobe_on_func_entry(unsigned long offset)
 195{
 196#ifdef PPC64_ELF_ABI_v2
 197#ifdef CONFIG_KPROBES_ON_FTRACE
 198        return offset <= 16;
 199#else
 200        return offset <= 8;
 201#endif
 202#else
 203        return !offset;
 204#endif
 205}
 206
 207void arch_prepare_kretprobe(struct kretprobe_instance *ri, struct pt_regs *regs)
 208{
 209        ri->ret_addr = (kprobe_opcode_t *)regs->link;
 210
 211        /* Replace the return addr with trampoline addr */
 212        regs->link = (unsigned long)kretprobe_trampoline;
 213}
 214NOKPROBE_SYMBOL(arch_prepare_kretprobe);
 215
 216static int try_to_emulate(struct kprobe *p, struct pt_regs *regs)
 217{
 218        int ret;
 219        unsigned int insn = *p->ainsn.insn;
 220
 221        /* regs->nip is also adjusted if emulate_step returns 1 */
 222        ret = emulate_step(regs, insn);
 223        if (ret > 0) {
 224                /*
 225                 * Once this instruction has been boosted
 226                 * successfully, set the boostable flag
 227                 */
 228                if (unlikely(p->ainsn.boostable == 0))
 229                        p->ainsn.boostable = 1;
 230        } else if (ret < 0) {
 231                /*
 232                 * We don't allow kprobes on mtmsr(d)/rfi(d), etc.
 233                 * So, we should never get here... but, its still
 234                 * good to catch them, just in case...
 235                 */
 236                printk("Can't step on instruction %x\n", insn);
 237                BUG();
 238        } else {
 239                /*
 240                 * If we haven't previously emulated this instruction, then it
 241                 * can't be boosted. Note it down so we don't try to do so again.
 242                 *
 243                 * If, however, we had emulated this instruction in the past,
 244                 * then this is just an error with the current run (for
 245                 * instance, exceptions due to a load/store). We return 0 so
 246                 * that this is now single-stepped, but continue to try
 247                 * emulating it in subsequent probe hits.
 248                 */
 249                if (unlikely(p->ainsn.boostable != 1))
 250                        p->ainsn.boostable = -1;
 251        }
 252
 253        return ret;
 254}
 255NOKPROBE_SYMBOL(try_to_emulate);
 256
 257int kprobe_handler(struct pt_regs *regs)
 258{
 259        struct kprobe *p;
 260        int ret = 0;
 261        unsigned int *addr = (unsigned int *)regs->nip;
 262        struct kprobe_ctlblk *kcb;
 263
 264        if (user_mode(regs))
 265                return 0;
 266
 267        /*
 268         * We don't want to be preempted for the entire
 269         * duration of kprobe processing
 270         */
 271        preempt_disable();
 272        kcb = get_kprobe_ctlblk();
 273
 274        /* Check we're not actually recursing */
 275        if (kprobe_running()) {
 276                p = get_kprobe(addr);
 277                if (p) {
 278                        kprobe_opcode_t insn = *p->ainsn.insn;
 279                        if (kcb->kprobe_status == KPROBE_HIT_SS &&
 280                                        is_trap(insn)) {
 281                                /* Turn off 'trace' bits */
 282                                regs->msr &= ~MSR_SINGLESTEP;
 283                                regs->msr |= kcb->kprobe_saved_msr;
 284                                goto no_kprobe;
 285                        }
 286                        /* We have reentered the kprobe_handler(), since
 287                         * another probe was hit while within the handler.
 288                         * We here save the original kprobes variables and
 289                         * just single step on the instruction of the new probe
 290                         * without calling any user handlers.
 291                         */
 292                        save_previous_kprobe(kcb);
 293                        set_current_kprobe(p, regs, kcb);
 294                        kprobes_inc_nmissed_count(p);
 295                        kcb->kprobe_status = KPROBE_REENTER;
 296                        if (p->ainsn.boostable >= 0) {
 297                                ret = try_to_emulate(p, regs);
 298
 299                                if (ret > 0) {
 300                                        restore_previous_kprobe(kcb);
 301                                        preempt_enable_no_resched();
 302                                        return 1;
 303                                }
 304                        }
 305                        prepare_singlestep(p, regs);
 306                        return 1;
 307                } else if (*addr != BREAKPOINT_INSTRUCTION) {
 308                        /* If trap variant, then it belongs not to us */
 309                        kprobe_opcode_t cur_insn = *addr;
 310
 311                        if (is_trap(cur_insn))
 312                                goto no_kprobe;
 313                        /* The breakpoint instruction was removed by
 314                         * another cpu right after we hit, no further
 315                         * handling of this interrupt is appropriate
 316                         */
 317                        ret = 1;
 318                }
 319                goto no_kprobe;
 320        }
 321
 322        p = get_kprobe(addr);
 323        if (!p) {
 324                if (*addr != BREAKPOINT_INSTRUCTION) {
 325                        /*
 326                         * PowerPC has multiple variants of the "trap"
 327                         * instruction. If the current instruction is a
 328                         * trap variant, it could belong to someone else
 329                         */
 330                        kprobe_opcode_t cur_insn = *addr;
 331                        if (is_trap(cur_insn))
 332                                goto no_kprobe;
 333                        /*
 334                         * The breakpoint instruction was removed right
 335                         * after we hit it.  Another cpu has removed
 336                         * either a probepoint or a debugger breakpoint
 337                         * at this address.  In either case, no further
 338                         * handling of this interrupt is appropriate.
 339                         */
 340                        ret = 1;
 341                }
 342                /* Not one of ours: let kernel handle it */
 343                goto no_kprobe;
 344        }
 345
 346        kcb->kprobe_status = KPROBE_HIT_ACTIVE;
 347        set_current_kprobe(p, regs, kcb);
 348        if (p->pre_handler && p->pre_handler(p, regs)) {
 349                /* handler changed execution path, so skip ss setup */
 350                reset_current_kprobe();
 351                preempt_enable_no_resched();
 352                return 1;
 353        }
 354
 355        if (p->ainsn.boostable >= 0) {
 356                ret = try_to_emulate(p, regs);
 357
 358                if (ret > 0) {
 359                        if (p->post_handler)
 360                                p->post_handler(p, regs, 0);
 361
 362                        kcb->kprobe_status = KPROBE_HIT_SSDONE;
 363                        reset_current_kprobe();
 364                        preempt_enable_no_resched();
 365                        return 1;
 366                }
 367        }
 368        prepare_singlestep(p, regs);
 369        kcb->kprobe_status = KPROBE_HIT_SS;
 370        return 1;
 371
 372no_kprobe:
 373        preempt_enable_no_resched();
 374        return ret;
 375}
 376NOKPROBE_SYMBOL(kprobe_handler);
 377
 378/*
 379 * Function return probe trampoline:
 380 *      - init_kprobes() establishes a probepoint here
 381 *      - When the probed function returns, this probe
 382 *              causes the handlers to fire
 383 */
 384asm(".global kretprobe_trampoline\n"
 385        ".type kretprobe_trampoline, @function\n"
 386        "kretprobe_trampoline:\n"
 387        "nop\n"
 388        "blr\n"
 389        ".size kretprobe_trampoline, .-kretprobe_trampoline\n");
 390
 391/*
 392 * Called when the probe at kretprobe trampoline is hit
 393 */
 394static int trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
 395{
 396        struct kretprobe_instance *ri = NULL;
 397        struct hlist_head *head, empty_rp;
 398        struct hlist_node *tmp;
 399        unsigned long flags, orig_ret_address = 0;
 400        unsigned long trampoline_address =(unsigned long)&kretprobe_trampoline;
 401
 402        INIT_HLIST_HEAD(&empty_rp);
 403        kretprobe_hash_lock(current, &head, &flags);
 404
 405        /*
 406         * It is possible to have multiple instances associated with a given
 407         * task either because an multiple functions in the call path
 408         * have a return probe installed on them, and/or more than one return
 409         * return probe was registered for a target function.
 410         *
 411         * We can handle this because:
 412         *     - instances are always inserted at the head of the list
 413         *     - when multiple return probes are registered for the same
 414         *       function, the first instance's ret_addr will point to the
 415         *       real return address, and all the rest will point to
 416         *       kretprobe_trampoline
 417         */
 418        hlist_for_each_entry_safe(ri, tmp, head, hlist) {
 419                if (ri->task != current)
 420                        /* another task is sharing our hash bucket */
 421                        continue;
 422
 423                if (ri->rp && ri->rp->handler)
 424                        ri->rp->handler(ri, regs);
 425
 426                orig_ret_address = (unsigned long)ri->ret_addr;
 427                recycle_rp_inst(ri, &empty_rp);
 428
 429                if (orig_ret_address != trampoline_address)
 430                        /*
 431                         * This is the real return address. Any other
 432                         * instances associated with this task are for
 433                         * other calls deeper on the call stack
 434                         */
 435                        break;
 436        }
 437
 438        kretprobe_assert(ri, orig_ret_address, trampoline_address);
 439
 440        /*
 441         * We get here through one of two paths:
 442         * 1. by taking a trap -> kprobe_handler() -> here
 443         * 2. by optprobe branch -> optimized_callback() -> opt_pre_handler() -> here
 444         *
 445         * When going back through (1), we need regs->nip to be setup properly
 446         * as it is used to determine the return address from the trap.
 447         * For (2), since nip is not honoured with optprobes, we instead setup
 448         * the link register properly so that the subsequent 'blr' in
 449         * kretprobe_trampoline jumps back to the right instruction.
 450         *
 451         * For nip, we should set the address to the previous instruction since
 452         * we end up emulating it in kprobe_handler(), which increments the nip
 453         * again.
 454         */
 455        regs->nip = orig_ret_address - 4;
 456        regs->link = orig_ret_address;
 457
 458        kretprobe_hash_unlock(current, &flags);
 459
 460        hlist_for_each_entry_safe(ri, tmp, &empty_rp, hlist) {
 461                hlist_del(&ri->hlist);
 462                kfree(ri);
 463        }
 464
 465        return 0;
 466}
 467NOKPROBE_SYMBOL(trampoline_probe_handler);
 468
 469/*
 470 * Called after single-stepping.  p->addr is the address of the
 471 * instruction whose first byte has been replaced by the "breakpoint"
 472 * instruction.  To avoid the SMP problems that can occur when we
 473 * temporarily put back the original opcode to single-step, we
 474 * single-stepped a copy of the instruction.  The address of this
 475 * copy is p->ainsn.insn.
 476 */
 477int kprobe_post_handler(struct pt_regs *regs)
 478{
 479        struct kprobe *cur = kprobe_running();
 480        struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
 481
 482        if (!cur || user_mode(regs))
 483                return 0;
 484
 485        /* make sure we got here for instruction we have a kprobe on */
 486        if (((unsigned long)cur->ainsn.insn + 4) != regs->nip)
 487                return 0;
 488
 489        if ((kcb->kprobe_status != KPROBE_REENTER) && cur->post_handler) {
 490                kcb->kprobe_status = KPROBE_HIT_SSDONE;
 491                cur->post_handler(cur, regs, 0);
 492        }
 493
 494        /* Adjust nip to after the single-stepped instruction */
 495        regs->nip = (unsigned long)cur->addr + 4;
 496        regs->msr |= kcb->kprobe_saved_msr;
 497
 498        /*Restore back the original saved kprobes variables and continue. */
 499        if (kcb->kprobe_status == KPROBE_REENTER) {
 500                restore_previous_kprobe(kcb);
 501                goto out;
 502        }
 503        reset_current_kprobe();
 504out:
 505        preempt_enable_no_resched();
 506
 507        /*
 508         * if somebody else is singlestepping across a probe point, msr
 509         * will have DE/SE set, in which case, continue the remaining processing
 510         * of do_debug, as if this is not a probe hit.
 511         */
 512        if (regs->msr & MSR_SINGLESTEP)
 513                return 0;
 514
 515        return 1;
 516}
 517NOKPROBE_SYMBOL(kprobe_post_handler);
 518
 519int kprobe_fault_handler(struct pt_regs *regs, int trapnr)
 520{
 521        struct kprobe *cur = kprobe_running();
 522        struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
 523        const struct exception_table_entry *entry;
 524
 525        switch(kcb->kprobe_status) {
 526        case KPROBE_HIT_SS:
 527        case KPROBE_REENTER:
 528                /*
 529                 * We are here because the instruction being single
 530                 * stepped caused a page fault. We reset the current
 531                 * kprobe and the nip points back to the probe address
 532                 * and allow the page fault handler to continue as a
 533                 * normal page fault.
 534                 */
 535                regs->nip = (unsigned long)cur->addr;
 536                regs->msr &= ~MSR_SINGLESTEP; /* Turn off 'trace' bits */
 537                regs->msr |= kcb->kprobe_saved_msr;
 538                if (kcb->kprobe_status == KPROBE_REENTER)
 539                        restore_previous_kprobe(kcb);
 540                else
 541                        reset_current_kprobe();
 542                preempt_enable_no_resched();
 543                break;
 544        case KPROBE_HIT_ACTIVE:
 545        case KPROBE_HIT_SSDONE:
 546                /*
 547                 * We increment the nmissed count for accounting,
 548                 * we can also use npre/npostfault count for accounting
 549                 * these specific fault cases.
 550                 */
 551                kprobes_inc_nmissed_count(cur);
 552
 553                /*
 554                 * We come here because instructions in the pre/post
 555                 * handler caused the page_fault, this could happen
 556                 * if handler tries to access user space by
 557                 * copy_from_user(), get_user() etc. Let the
 558                 * user-specified handler try to fix it first.
 559                 */
 560                if (cur->fault_handler && cur->fault_handler(cur, regs, trapnr))
 561                        return 1;
 562
 563                /*
 564                 * In case the user-specified fault handler returned
 565                 * zero, try to fix up.
 566                 */
 567                if ((entry = search_exception_tables(regs->nip)) != NULL) {
 568                        regs->nip = extable_fixup(entry);
 569                        return 1;
 570                }
 571
 572                /*
 573                 * fixup_exception() could not handle it,
 574                 * Let do_page_fault() fix it.
 575                 */
 576                break;
 577        default:
 578                break;
 579        }
 580        return 0;
 581}
 582NOKPROBE_SYMBOL(kprobe_fault_handler);
 583
 584unsigned long arch_deref_entry_point(void *entry)
 585{
 586#ifdef PPC64_ELF_ABI_v1
 587        if (!kernel_text_address((unsigned long)entry))
 588                return ppc_global_function_entry(entry);
 589        else
 590#endif
 591                return (unsigned long)entry;
 592}
 593NOKPROBE_SYMBOL(arch_deref_entry_point);
 594
 595static struct kprobe trampoline_p = {
 596        .addr = (kprobe_opcode_t *) &kretprobe_trampoline,
 597        .pre_handler = trampoline_probe_handler
 598};
 599
 600int __init arch_init_kprobes(void)
 601{
 602        return register_kprobe(&trampoline_p);
 603}
 604
 605int arch_trampoline_kprobe(struct kprobe *p)
 606{
 607        if (p->addr == (kprobe_opcode_t *)&kretprobe_trampoline)
 608                return 1;
 609
 610        return 0;
 611}
 612NOKPROBE_SYMBOL(arch_trampoline_kprobe);
 613