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