linux/arch/mips/kernel/kprobes.c
<<
>>
Prefs
   1/*
   2 *  Kernel Probes (KProbes)
   3 *  arch/mips/kernel/kprobes.c
   4 *
   5 *  Copyright 2006 Sony Corp.
   6 *  Copyright 2010 Cavium Networks
   7 *
   8 *  Some portions copied from the powerpc version.
   9 *
  10 *   Copyright (C) IBM Corporation, 2002, 2004
  11 *
  12 *  This program is free software; you can redistribute it and/or modify
  13 *  it under the terms of the GNU General Public License as published by
  14 *  the Free Software Foundation; version 2 of the License.
  15 *
  16 *  This program is distributed in the hope that it will be useful,
  17 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  18 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19 *  GNU General Public License for more details.
  20 *
  21 *  You should have received a copy of the GNU General Public License
  22 *  along with this program; if not, write to the Free Software
  23 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  24 */
  25
  26#include <linux/kprobes.h>
  27#include <linux/preempt.h>
  28#include <linux/uaccess.h>
  29#include <linux/kdebug.h>
  30#include <linux/slab.h>
  31
  32#include <asm/ptrace.h>
  33#include <asm/branch.h>
  34#include <asm/break.h>
  35#include <asm/inst.h>
  36
  37static const union mips_instruction breakpoint_insn = {
  38        .b_format = {
  39                .opcode = spec_op,
  40                .code = BRK_KPROBE_BP,
  41                .func = break_op
  42        }
  43};
  44
  45static const union mips_instruction breakpoint2_insn = {
  46        .b_format = {
  47                .opcode = spec_op,
  48                .code = BRK_KPROBE_SSTEPBP,
  49                .func = break_op
  50        }
  51};
  52
  53DEFINE_PER_CPU(struct kprobe *, current_kprobe);
  54DEFINE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk);
  55
  56static int __kprobes insn_has_delayslot(union mips_instruction insn)
  57{
  58        switch (insn.i_format.opcode) {
  59
  60                /*
  61                 * This group contains:
  62                 * jr and jalr are in r_format format.
  63                 */
  64        case spec_op:
  65                switch (insn.r_format.func) {
  66                case jr_op:
  67                case jalr_op:
  68                        break;
  69                default:
  70                        goto insn_ok;
  71                }
  72
  73                /*
  74                 * This group contains:
  75                 * bltz_op, bgez_op, bltzl_op, bgezl_op,
  76                 * bltzal_op, bgezal_op, bltzall_op, bgezall_op.
  77                 */
  78        case bcond_op:
  79
  80                /*
  81                 * These are unconditional and in j_format.
  82                 */
  83        case jal_op:
  84        case j_op:
  85
  86                /*
  87                 * These are conditional and in i_format.
  88                 */
  89        case beq_op:
  90        case beql_op:
  91        case bne_op:
  92        case bnel_op:
  93        case blez_op:
  94        case blezl_op:
  95        case bgtz_op:
  96        case bgtzl_op:
  97
  98                /*
  99                 * These are the FPA/cp1 branch instructions.
 100                 */
 101        case cop1_op:
 102
 103#ifdef CONFIG_CPU_CAVIUM_OCTEON
 104        case lwc2_op: /* This is bbit0 on Octeon */
 105        case ldc2_op: /* This is bbit032 on Octeon */
 106        case swc2_op: /* This is bbit1 on Octeon */
 107        case sdc2_op: /* This is bbit132 on Octeon */
 108#endif
 109                return 1;
 110        default:
 111                break;
 112        }
 113insn_ok:
 114        return 0;
 115}
 116
 117/*
 118 * insn_has_ll_or_sc function checks whether instruction is ll or sc
 119 * one; putting breakpoint on top of atomic ll/sc pair is bad idea;
 120 * so we need to prevent it and refuse kprobes insertion for such
 121 * instructions; cannot do much about breakpoint in the middle of
 122 * ll/sc pair; it is upto user to avoid those places
 123 */
 124static int __kprobes insn_has_ll_or_sc(union mips_instruction insn)
 125{
 126        int ret = 0;
 127
 128        switch (insn.i_format.opcode) {
 129        case ll_op:
 130        case lld_op:
 131        case sc_op:
 132        case scd_op:
 133                ret = 1;
 134                break;
 135        default:
 136                break;
 137        }
 138        return ret;
 139}
 140
 141int __kprobes arch_prepare_kprobe(struct kprobe *p)
 142{
 143        union mips_instruction insn;
 144        union mips_instruction prev_insn;
 145        int ret = 0;
 146
 147        insn = p->addr[0];
 148
 149        if (insn_has_ll_or_sc(insn)) {
 150                pr_notice("Kprobes for ll and sc instructions are not"
 151                          "supported\n");
 152                ret = -EINVAL;
 153                goto out;
 154        }
 155
 156        if ((probe_kernel_read(&prev_insn, p->addr - 1,
 157                                sizeof(mips_instruction)) == 0) &&
 158                                insn_has_delayslot(prev_insn)) {
 159                pr_notice("Kprobes for branch delayslot are not supported\n");
 160                ret = -EINVAL;
 161                goto out;
 162        }
 163
 164        /* insn: must be on special executable page on mips. */
 165        p->ainsn.insn = get_insn_slot();
 166        if (!p->ainsn.insn) {
 167                ret = -ENOMEM;
 168                goto out;
 169        }
 170
 171        /*
 172         * In the kprobe->ainsn.insn[] array we store the original
 173         * instruction at index zero and a break trap instruction at
 174         * index one.
 175         *
 176         * On MIPS arch if the instruction at probed address is a
 177         * branch instruction, we need to execute the instruction at
 178         * Branch Delayslot (BD) at the time of probe hit. As MIPS also
 179         * doesn't have single stepping support, the BD instruction can
 180         * not be executed in-line and it would be executed on SSOL slot
 181         * using a normal breakpoint instruction in the next slot.
 182         * So, read the instruction and save it for later execution.
 183         */
 184        if (insn_has_delayslot(insn))
 185                memcpy(&p->ainsn.insn[0], p->addr + 1, sizeof(kprobe_opcode_t));
 186        else
 187                memcpy(&p->ainsn.insn[0], p->addr, sizeof(kprobe_opcode_t));
 188
 189        p->ainsn.insn[1] = breakpoint2_insn;
 190        p->opcode = *p->addr;
 191
 192out:
 193        return ret;
 194}
 195
 196void __kprobes arch_arm_kprobe(struct kprobe *p)
 197{
 198        *p->addr = breakpoint_insn;
 199        flush_insn_slot(p);
 200}
 201
 202void __kprobes arch_disarm_kprobe(struct kprobe *p)
 203{
 204        *p->addr = p->opcode;
 205        flush_insn_slot(p);
 206}
 207
 208void __kprobes arch_remove_kprobe(struct kprobe *p)
 209{
 210        if (p->ainsn.insn) {
 211                free_insn_slot(p->ainsn.insn, 0);
 212                p->ainsn.insn = NULL;
 213        }
 214}
 215
 216static void save_previous_kprobe(struct kprobe_ctlblk *kcb)
 217{
 218        kcb->prev_kprobe.kp = kprobe_running();
 219        kcb->prev_kprobe.status = kcb->kprobe_status;
 220        kcb->prev_kprobe.old_SR = kcb->kprobe_old_SR;
 221        kcb->prev_kprobe.saved_SR = kcb->kprobe_saved_SR;
 222        kcb->prev_kprobe.saved_epc = kcb->kprobe_saved_epc;
 223}
 224
 225static void restore_previous_kprobe(struct kprobe_ctlblk *kcb)
 226{
 227        __get_cpu_var(current_kprobe) = kcb->prev_kprobe.kp;
 228        kcb->kprobe_status = kcb->prev_kprobe.status;
 229        kcb->kprobe_old_SR = kcb->prev_kprobe.old_SR;
 230        kcb->kprobe_saved_SR = kcb->prev_kprobe.saved_SR;
 231        kcb->kprobe_saved_epc = kcb->prev_kprobe.saved_epc;
 232}
 233
 234static void set_current_kprobe(struct kprobe *p, struct pt_regs *regs,
 235                               struct kprobe_ctlblk *kcb)
 236{
 237        __get_cpu_var(current_kprobe) = p;
 238        kcb->kprobe_saved_SR = kcb->kprobe_old_SR = (regs->cp0_status & ST0_IE);
 239        kcb->kprobe_saved_epc = regs->cp0_epc;
 240}
 241
 242/**
 243 * evaluate_branch_instrucion -
 244 *
 245 * Evaluate the branch instruction at probed address during probe hit. The
 246 * result of evaluation would be the updated epc. The insturction in delayslot
 247 * would actually be single stepped using a normal breakpoint) on SSOL slot.
 248 *
 249 * The result is also saved in the kprobe control block for later use,
 250 * in case we need to execute the delayslot instruction. The latter will be
 251 * false for NOP instruction in dealyslot and the branch-likely instructions
 252 * when the branch is taken. And for those cases we set a flag as
 253 * SKIP_DELAYSLOT in the kprobe control block
 254 */
 255static int evaluate_branch_instruction(struct kprobe *p, struct pt_regs *regs,
 256                                        struct kprobe_ctlblk *kcb)
 257{
 258        union mips_instruction insn = p->opcode;
 259        long epc;
 260        int ret = 0;
 261
 262        epc = regs->cp0_epc;
 263        if (epc & 3)
 264                goto unaligned;
 265
 266        if (p->ainsn.insn->word == 0)
 267                kcb->flags |= SKIP_DELAYSLOT;
 268        else
 269                kcb->flags &= ~SKIP_DELAYSLOT;
 270
 271        ret = __compute_return_epc_for_insn(regs, insn);
 272        if (ret < 0)
 273                return ret;
 274
 275        if (ret == BRANCH_LIKELY_TAKEN)
 276                kcb->flags |= SKIP_DELAYSLOT;
 277
 278        kcb->target_epc = regs->cp0_epc;
 279
 280        return 0;
 281
 282unaligned:
 283        pr_notice("%s: unaligned epc - sending SIGBUS.\n", current->comm);
 284        force_sig(SIGBUS, current);
 285        return -EFAULT;
 286
 287}
 288
 289static void prepare_singlestep(struct kprobe *p, struct pt_regs *regs,
 290                                                struct kprobe_ctlblk *kcb)
 291{
 292        int ret = 0;
 293
 294        regs->cp0_status &= ~ST0_IE;
 295
 296        /* single step inline if the instruction is a break */
 297        if (p->opcode.word == breakpoint_insn.word ||
 298            p->opcode.word == breakpoint2_insn.word)
 299                regs->cp0_epc = (unsigned long)p->addr;
 300        else if (insn_has_delayslot(p->opcode)) {
 301                ret = evaluate_branch_instruction(p, regs, kcb);
 302                if (ret < 0) {
 303                        pr_notice("Kprobes: Error in evaluating branch\n");
 304                        return;
 305                }
 306        }
 307        regs->cp0_epc = (unsigned long)&p->ainsn.insn[0];
 308}
 309
 310/*
 311 * Called after single-stepping.  p->addr is the address of the
 312 * instruction whose first byte has been replaced by the "break 0"
 313 * instruction.  To avoid the SMP problems that can occur when we
 314 * temporarily put back the original opcode to single-step, we
 315 * single-stepped a copy of the instruction.  The address of this
 316 * copy is p->ainsn.insn.
 317 *
 318 * This function prepares to return from the post-single-step
 319 * breakpoint trap. In case of branch instructions, the target
 320 * epc to be restored.
 321 */
 322static void __kprobes resume_execution(struct kprobe *p,
 323                                       struct pt_regs *regs,
 324                                       struct kprobe_ctlblk *kcb)
 325{
 326        if (insn_has_delayslot(p->opcode))
 327                regs->cp0_epc = kcb->target_epc;
 328        else {
 329                unsigned long orig_epc = kcb->kprobe_saved_epc;
 330                regs->cp0_epc = orig_epc + 4;
 331        }
 332}
 333
 334static int __kprobes kprobe_handler(struct pt_regs *regs)
 335{
 336        struct kprobe *p;
 337        int ret = 0;
 338        kprobe_opcode_t *addr;
 339        struct kprobe_ctlblk *kcb;
 340
 341        addr = (kprobe_opcode_t *) regs->cp0_epc;
 342
 343        /*
 344         * We don't want to be preempted for the entire
 345         * duration of kprobe processing
 346         */
 347        preempt_disable();
 348        kcb = get_kprobe_ctlblk();
 349
 350        /* Check we're not actually recursing */
 351        if (kprobe_running()) {
 352                p = get_kprobe(addr);
 353                if (p) {
 354                        if (kcb->kprobe_status == KPROBE_HIT_SS &&
 355                            p->ainsn.insn->word == breakpoint_insn.word) {
 356                                regs->cp0_status &= ~ST0_IE;
 357                                regs->cp0_status |= kcb->kprobe_saved_SR;
 358                                goto no_kprobe;
 359                        }
 360                        /*
 361                         * We have reentered the kprobe_handler(), since
 362                         * another probe was hit while within the handler.
 363                         * We here save the original kprobes variables and
 364                         * just single step on the instruction of the new probe
 365                         * without calling any user handlers.
 366                         */
 367                        save_previous_kprobe(kcb);
 368                        set_current_kprobe(p, regs, kcb);
 369                        kprobes_inc_nmissed_count(p);
 370                        prepare_singlestep(p, regs, kcb);
 371                        kcb->kprobe_status = KPROBE_REENTER;
 372                        if (kcb->flags & SKIP_DELAYSLOT) {
 373                                resume_execution(p, regs, kcb);
 374                                restore_previous_kprobe(kcb);
 375                                preempt_enable_no_resched();
 376                        }
 377                        return 1;
 378                } else {
 379                        if (addr->word != breakpoint_insn.word) {
 380                                /*
 381                                 * The breakpoint instruction was removed by
 382                                 * another cpu right after we hit, no further
 383                                 * handling of this interrupt is appropriate
 384                                 */
 385                                ret = 1;
 386                                goto no_kprobe;
 387                        }
 388                        p = __get_cpu_var(current_kprobe);
 389                        if (p->break_handler && p->break_handler(p, regs))
 390                                goto ss_probe;
 391                }
 392                goto no_kprobe;
 393        }
 394
 395        p = get_kprobe(addr);
 396        if (!p) {
 397                if (addr->word != breakpoint_insn.word) {
 398                        /*
 399                         * The breakpoint instruction was removed right
 400                         * after we hit it.  Another cpu has removed
 401                         * either a probepoint or a debugger breakpoint
 402                         * at this address.  In either case, no further
 403                         * handling of this interrupt is appropriate.
 404                         */
 405                        ret = 1;
 406                }
 407                /* Not one of ours: let kernel handle it */
 408                goto no_kprobe;
 409        }
 410
 411        set_current_kprobe(p, regs, kcb);
 412        kcb->kprobe_status = KPROBE_HIT_ACTIVE;
 413
 414        if (p->pre_handler && p->pre_handler(p, regs)) {
 415                /* handler has already set things up, so skip ss setup */
 416                return 1;
 417        }
 418
 419ss_probe:
 420        prepare_singlestep(p, regs, kcb);
 421        if (kcb->flags & SKIP_DELAYSLOT) {
 422                kcb->kprobe_status = KPROBE_HIT_SSDONE;
 423                if (p->post_handler)
 424                        p->post_handler(p, regs, 0);
 425                resume_execution(p, regs, kcb);
 426                preempt_enable_no_resched();
 427        } else
 428                kcb->kprobe_status = KPROBE_HIT_SS;
 429
 430        return 1;
 431
 432no_kprobe:
 433        preempt_enable_no_resched();
 434        return ret;
 435
 436}
 437
 438static inline int post_kprobe_handler(struct pt_regs *regs)
 439{
 440        struct kprobe *cur = kprobe_running();
 441        struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
 442
 443        if (!cur)
 444                return 0;
 445
 446        if ((kcb->kprobe_status != KPROBE_REENTER) && cur->post_handler) {
 447                kcb->kprobe_status = KPROBE_HIT_SSDONE;
 448                cur->post_handler(cur, regs, 0);
 449        }
 450
 451        resume_execution(cur, regs, kcb);
 452
 453        regs->cp0_status |= kcb->kprobe_saved_SR;
 454
 455        /* Restore back the original saved kprobes variables and continue. */
 456        if (kcb->kprobe_status == KPROBE_REENTER) {
 457                restore_previous_kprobe(kcb);
 458                goto out;
 459        }
 460        reset_current_kprobe();
 461out:
 462        preempt_enable_no_resched();
 463
 464        return 1;
 465}
 466
 467static inline int kprobe_fault_handler(struct pt_regs *regs, int trapnr)
 468{
 469        struct kprobe *cur = kprobe_running();
 470        struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
 471
 472        if (cur->fault_handler && cur->fault_handler(cur, regs, trapnr))
 473                return 1;
 474
 475        if (kcb->kprobe_status & KPROBE_HIT_SS) {
 476                resume_execution(cur, regs, kcb);
 477                regs->cp0_status |= kcb->kprobe_old_SR;
 478
 479                reset_current_kprobe();
 480                preempt_enable_no_resched();
 481        }
 482        return 0;
 483}
 484
 485/*
 486 * Wrapper routine for handling exceptions.
 487 */
 488int __kprobes kprobe_exceptions_notify(struct notifier_block *self,
 489                                       unsigned long val, void *data)
 490{
 491
 492        struct die_args *args = (struct die_args *)data;
 493        int ret = NOTIFY_DONE;
 494
 495        switch (val) {
 496        case DIE_BREAK:
 497                if (kprobe_handler(args->regs))
 498                        ret = NOTIFY_STOP;
 499                break;
 500        case DIE_SSTEPBP:
 501                if (post_kprobe_handler(args->regs))
 502                        ret = NOTIFY_STOP;
 503                break;
 504
 505        case DIE_PAGE_FAULT:
 506                /* kprobe_running() needs smp_processor_id() */
 507                preempt_disable();
 508
 509                if (kprobe_running()
 510                    && kprobe_fault_handler(args->regs, args->trapnr))
 511                        ret = NOTIFY_STOP;
 512                preempt_enable();
 513                break;
 514        default:
 515                break;
 516        }
 517        return ret;
 518}
 519
 520int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
 521{
 522        struct jprobe *jp = container_of(p, struct jprobe, kp);
 523        struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
 524
 525        kcb->jprobe_saved_regs = *regs;
 526        kcb->jprobe_saved_sp = regs->regs[29];
 527
 528        memcpy(kcb->jprobes_stack, (void *)kcb->jprobe_saved_sp,
 529               MIN_JPROBES_STACK_SIZE(kcb->jprobe_saved_sp));
 530
 531        regs->cp0_epc = (unsigned long)(jp->entry);
 532
 533        return 1;
 534}
 535
 536/* Defined in the inline asm below. */
 537void jprobe_return_end(void);
 538
 539void __kprobes jprobe_return(void)
 540{
 541        /* Assembler quirk necessitates this '0,code' business.  */
 542        asm volatile(
 543                "break 0,%0\n\t"
 544                ".globl jprobe_return_end\n"
 545                "jprobe_return_end:\n"
 546                : : "n" (BRK_KPROBE_BP) : "memory");
 547}
 548
 549int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
 550{
 551        struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
 552
 553        if (regs->cp0_epc >= (unsigned long)jprobe_return &&
 554            regs->cp0_epc <= (unsigned long)jprobe_return_end) {
 555                *regs = kcb->jprobe_saved_regs;
 556                memcpy((void *)kcb->jprobe_saved_sp, kcb->jprobes_stack,
 557                       MIN_JPROBES_STACK_SIZE(kcb->jprobe_saved_sp));
 558                preempt_enable_no_resched();
 559
 560                return 1;
 561        }
 562        return 0;
 563}
 564
 565/*
 566 * Function return probe trampoline:
 567 *      - init_kprobes() establishes a probepoint here
 568 *      - When the probed function returns, this probe causes the
 569 *        handlers to fire
 570 */
 571static void __used kretprobe_trampoline_holder(void)
 572{
 573        asm volatile(
 574                ".set push\n\t"
 575                /* Keep the assembler from reordering and placing JR here. */
 576                ".set noreorder\n\t"
 577                "nop\n\t"
 578                ".global kretprobe_trampoline\n"
 579                "kretprobe_trampoline:\n\t"
 580                "nop\n\t"
 581                ".set pop"
 582                : : : "memory");
 583}
 584
 585void kretprobe_trampoline(void);
 586
 587void __kprobes arch_prepare_kretprobe(struct kretprobe_instance *ri,
 588                                      struct pt_regs *regs)
 589{
 590        ri->ret_addr = (kprobe_opcode_t *) regs->regs[31];
 591
 592        /* Replace the return addr with trampoline addr */
 593        regs->regs[31] = (unsigned long)kretprobe_trampoline;
 594}
 595
 596/*
 597 * Called when the probe at kretprobe trampoline is hit
 598 */
 599static int __kprobes trampoline_probe_handler(struct kprobe *p,
 600                                                struct pt_regs *regs)
 601{
 602        struct kretprobe_instance *ri = NULL;
 603        struct hlist_head *head, empty_rp;
 604        struct hlist_node *tmp;
 605        unsigned long flags, orig_ret_address = 0;
 606        unsigned long trampoline_address = (unsigned long)kretprobe_trampoline;
 607
 608        INIT_HLIST_HEAD(&empty_rp);
 609        kretprobe_hash_lock(current, &head, &flags);
 610
 611        /*
 612         * It is possible to have multiple instances associated with a given
 613         * task either because an multiple functions in the call path
 614         * have a return probe installed on them, and/or more than one return
 615         * return probe was registered for a target function.
 616         *
 617         * We can handle this because:
 618         *     - instances are always inserted at the head of the list
 619         *     - when multiple return probes are registered for the same
 620         *       function, the first instance's ret_addr will point to the
 621         *       real return address, and all the rest will point to
 622         *       kretprobe_trampoline
 623         */
 624        hlist_for_each_entry_safe(ri, tmp, head, hlist) {
 625                if (ri->task != current)
 626                        /* another task is sharing our hash bucket */
 627                        continue;
 628
 629                if (ri->rp && ri->rp->handler)
 630                        ri->rp->handler(ri, regs);
 631
 632                orig_ret_address = (unsigned long)ri->ret_addr;
 633                recycle_rp_inst(ri, &empty_rp);
 634
 635                if (orig_ret_address != trampoline_address)
 636                        /*
 637                         * This is the real return address. Any other
 638                         * instances associated with this task are for
 639                         * other calls deeper on the call stack
 640                         */
 641                        break;
 642        }
 643
 644        kretprobe_assert(ri, orig_ret_address, trampoline_address);
 645        instruction_pointer(regs) = orig_ret_address;
 646
 647        reset_current_kprobe();
 648        kretprobe_hash_unlock(current, &flags);
 649        preempt_enable_no_resched();
 650
 651        hlist_for_each_entry_safe(ri, tmp, &empty_rp, hlist) {
 652                hlist_del(&ri->hlist);
 653                kfree(ri);
 654        }
 655        /*
 656         * By returning a non-zero value, we are telling
 657         * kprobe_handler() that we don't want the post_handler
 658         * to run (and have re-enabled preemption)
 659         */
 660        return 1;
 661}
 662
 663int __kprobes arch_trampoline_kprobe(struct kprobe *p)
 664{
 665        if (p->addr == (kprobe_opcode_t *)kretprobe_trampoline)
 666                return 1;
 667
 668        return 0;
 669}
 670
 671static struct kprobe trampoline_p = {
 672        .addr = (kprobe_opcode_t *)kretprobe_trampoline,
 673        .pre_handler = trampoline_probe_handler
 674};
 675
 676int __init arch_init_kprobes(void)
 677{
 678        return register_kprobe(&trampoline_p);
 679}
 680