auprobe 33 arch/arm/include/asm/uprobes.h void (*prehandler)(struct arch_uprobe *auprobe, auprobe 36 arch/arm/include/asm/uprobes.h void (*posthandler)(struct arch_uprobe *auprobe, auprobe 66 arch/arm/probes/uprobes/actions-arm.c static void uprobe_set_pc(struct arch_uprobe *auprobe, auprobe 70 arch/arm/probes/uprobes/actions-arm.c u32 pcreg = auprobe->pcreg; auprobe 76 arch/arm/probes/uprobes/actions-arm.c static void uprobe_unset_pc(struct arch_uprobe *auprobe, auprobe 81 arch/arm/probes/uprobes/actions-arm.c regs->uregs[auprobe->pcreg] = autask->backup; auprobe 84 arch/arm/probes/uprobes/actions-arm.c static void uprobe_aluwrite_pc(struct arch_uprobe *auprobe, auprobe 88 arch/arm/probes/uprobes/actions-arm.c u32 pcreg = auprobe->pcreg; auprobe 94 arch/arm/probes/uprobes/actions-arm.c static void uprobe_write_pc(struct arch_uprobe *auprobe, auprobe 98 arch/arm/probes/uprobes/actions-arm.c u32 pcreg = auprobe->pcreg; auprobe 108 arch/arm/probes/uprobes/actions-arm.c struct arch_uprobe *auprobe = container_of(asi, struct arch_uprobe, auprobe 114 arch/arm/probes/uprobes/actions-arm.c reg = uprobes_substitute_pc(&auprobe->ixol[0], regs); auprobe 121 arch/arm/probes/uprobes/actions-arm.c auprobe->pcreg = reg; auprobe 122 arch/arm/probes/uprobes/actions-arm.c auprobe->prehandler = uprobe_set_pc; auprobe 123 arch/arm/probes/uprobes/actions-arm.c auprobe->posthandler = uprobe_unset_pc; auprobe 132 arch/arm/probes/uprobes/actions-arm.c struct arch_uprobe *auprobe = container_of(asi, struct arch_uprobe, auprobe 137 arch/arm/probes/uprobes/actions-arm.c auprobe->posthandler = alu ? uprobe_aluwrite_pc auprobe 163 arch/arm/probes/uprobes/actions-arm.c struct arch_uprobe *auprobe = container_of(asi, struct arch_uprobe, auprobe 182 arch/arm/probes/uprobes/actions-arm.c auprobe->pcreg = 14; auprobe 183 arch/arm/probes/uprobes/actions-arm.c auprobe->ixol[0] = __opcode_to_mem_arm(insn); auprobe 185 arch/arm/probes/uprobes/actions-arm.c auprobe->prehandler = uprobe_set_pc; auprobe 187 arch/arm/probes/uprobes/actions-arm.c auprobe->posthandler = uprobe_write_pc; auprobe 189 arch/arm/probes/uprobes/actions-arm.c auprobe->posthandler = uprobe_unset_pc; auprobe 29 arch/arm/probes/uprobes/core.c int set_swbp(struct arch_uprobe *auprobe, struct mm_struct *mm, auprobe 32 arch/arm/probes/uprobes/core.c return uprobe_write_opcode(auprobe, mm, vaddr, auprobe 33 arch/arm/probes/uprobes/core.c __opcode_to_mem_arm(auprobe->bpinsn)); auprobe 36 arch/arm/probes/uprobes/core.c bool arch_uprobe_ignore(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 38 arch/arm/probes/uprobes/core.c if (!auprobe->asi.insn_check_cc(regs->ARM_cpsr)) { auprobe 46 arch/arm/probes/uprobes/core.c bool arch_uprobe_skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 50 arch/arm/probes/uprobes/core.c if (!auprobe->simulate) auprobe 53 arch/arm/probes/uprobes/core.c opcode = __mem_to_opcode_arm(*(unsigned int *) auprobe->insn); auprobe 55 arch/arm/probes/uprobes/core.c auprobe->asi.insn_singlestep(opcode, &auprobe->asi, regs); auprobe 72 arch/arm/probes/uprobes/core.c int arch_uprobe_analyze_insn(struct arch_uprobe *auprobe, struct mm_struct *mm, auprobe 83 arch/arm/probes/uprobes/core.c insn = __mem_to_opcode_arm(*(unsigned int *)auprobe->insn); auprobe 84 arch/arm/probes/uprobes/core.c auprobe->ixol[0] = __opcode_to_mem_arm(insn); auprobe 85 arch/arm/probes/uprobes/core.c auprobe->ixol[1] = __opcode_to_mem_arm(UPROBE_SS_ARM_INSN); auprobe 87 arch/arm/probes/uprobes/core.c ret = arm_probes_decode_insn(insn, &auprobe->asi, false, auprobe 94 arch/arm/probes/uprobes/core.c auprobe->simulate = true; auprobe 108 arch/arm/probes/uprobes/core.c auprobe->bpinsn = bpinsn; auprobe 133 arch/arm/probes/uprobes/core.c int arch_uprobe_pre_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 137 arch/arm/probes/uprobes/core.c if (auprobe->prehandler) auprobe 138 arch/arm/probes/uprobes/core.c auprobe->prehandler(auprobe, &utask->autask, regs); auprobe 147 arch/arm/probes/uprobes/core.c int arch_uprobe_post_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 156 arch/arm/probes/uprobes/core.c if (auprobe->posthandler) auprobe 157 arch/arm/probes/uprobes/core.c auprobe->posthandler(auprobe, &utask->autask, regs); auprobe 170 arch/arm/probes/uprobes/core.c void arch_uprobe_abort_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 34 arch/arm64/kernel/probes/uprobes.c int arch_uprobe_analyze_insn(struct arch_uprobe *auprobe, struct mm_struct *mm, auprobe 45 arch/arm64/kernel/probes/uprobes.c insn = *(probe_opcode_t *)(&auprobe->insn[0]); auprobe 47 arch/arm64/kernel/probes/uprobes.c switch (arm_probe_decode_insn(insn, &auprobe->api)) { auprobe 52 arch/arm64/kernel/probes/uprobes.c auprobe->simulate = true; auprobe 62 arch/arm64/kernel/probes/uprobes.c int arch_uprobe_pre_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 77 arch/arm64/kernel/probes/uprobes.c int arch_uprobe_post_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 103 arch/arm64/kernel/probes/uprobes.c bool arch_uprobe_skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 108 arch/arm64/kernel/probes/uprobes.c if (!auprobe->simulate) auprobe 111 arch/arm64/kernel/probes/uprobes.c insn = *(probe_opcode_t *)(&auprobe->insn[0]); auprobe 114 arch/arm64/kernel/probes/uprobes.c if (auprobe->api.handler) auprobe 115 arch/arm64/kernel/probes/uprobes.c auprobe->api.handler(insn, addr, regs); auprobe 120 arch/arm64/kernel/probes/uprobes.c void arch_uprobe_abort_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 221 arch/mips/kernel/uprobes.c int __weak set_swbp(struct arch_uprobe *auprobe, struct mm_struct *mm, auprobe 224 arch/mips/kernel/uprobes.c return uprobe_write_opcode(auprobe, mm, vaddr, UPROBE_SWBP_INSN); auprobe 259 arch/mips/kernel/uprobes.c bool arch_uprobe_skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 37 arch/powerpc/kernel/uprobes.c int arch_uprobe_analyze_insn(struct arch_uprobe *auprobe, auprobe 51 arch/powerpc/kernel/uprobes.c int arch_uprobe_pre_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 99 arch/powerpc/kernel/uprobes.c int arch_uprobe_post_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 154 arch/powerpc/kernel/uprobes.c void arch_uprobe_abort_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 168 arch/powerpc/kernel/uprobes.c bool arch_uprobe_skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 176 arch/powerpc/kernel/uprobes.c ret = emulate_step(regs, auprobe->insn); auprobe 23 arch/s390/kernel/uprobes.c int arch_uprobe_analyze_insn(struct arch_uprobe *auprobe, struct mm_struct *mm, auprobe 26 arch/s390/kernel/uprobes.c return probe_is_prohibited_opcode(auprobe->insn); auprobe 29 arch/s390/kernel/uprobes.c int arch_uprobe_pre_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 36 arch/s390/kernel/uprobes.c auprobe->saved_per = psw_bits(regs->psw).per; auprobe 37 arch/s390/kernel/uprobes.c auprobe->saved_int_code = regs->int_code; auprobe 78 arch/s390/kernel/uprobes.c int arch_uprobe_post_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 80 arch/s390/kernel/uprobes.c int fixup = probe_get_fixup_type(auprobe->insn); auprobe 85 arch/s390/kernel/uprobes.c psw_bits(regs->psw).per = auprobe->saved_per; auprobe 86 arch/s390/kernel/uprobes.c regs->int_code = auprobe->saved_int_code; auprobe 91 arch/s390/kernel/uprobes.c int reg = (auprobe->insn[0] & 0xf0) >> 4; auprobe 96 arch/s390/kernel/uprobes.c int ilen = insn_length(auprobe->insn[0] >> 8); auprobe 135 arch/s390/kernel/uprobes.c void arch_uprobe_abort_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 138 arch/s390/kernel/uprobes.c regs->int_code = auprobe->saved_int_code; auprobe 269 arch/s390/kernel/uprobes.c static void handle_insn_ril(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 277 arch/s390/kernel/uprobes.c insn = (struct insn_ril *) &auprobe->insn; auprobe 383 arch/s390/kernel/uprobes.c bool arch_uprobe_skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 392 arch/s390/kernel/uprobes.c if (probe_is_insn_relative_long(auprobe->insn)) { auprobe 393 arch/s390/kernel/uprobes.c handle_insn_ril(auprobe, regs); auprobe 76 arch/sparc/kernel/uprobes.c int arch_uprobe_analyze_insn(struct arch_uprobe *auprobe, auprobe 169 arch/sparc/kernel/uprobes.c bool arch_uprobe_skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 174 arch/sparc/kernel/uprobes.c if (auprobe->ixol == (1 << 24)) { auprobe 190 arch/sparc/kernel/uprobes.c int arch_uprobe_pre_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 216 arch/sparc/kernel/uprobes.c int arch_uprobe_post_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 220 arch/sparc/kernel/uprobes.c u32 insn = auprobe->ixol; auprobe 293 arch/sparc/kernel/uprobes.c void arch_uprobe_abort_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 276 arch/x86/kernel/uprobes.c static int uprobe_init_insn(struct arch_uprobe *auprobe, struct insn *insn, bool x86_64) auprobe 280 arch/x86/kernel/uprobes.c insn_init(insn, auprobe->insn, sizeof(auprobe->insn), x86_64); auprobe 334 arch/x86/kernel/uprobes.c static void riprel_analyze(struct arch_uprobe *auprobe, struct insn *insn) auprobe 349 arch/x86/kernel/uprobes.c cursor = auprobe->insn + insn_offset_rex_prefix(insn); auprobe 368 arch/x86/kernel/uprobes.c cursor = auprobe->insn + insn_offset_vex_prefix(insn) + 1; auprobe 432 arch/x86/kernel/uprobes.c auprobe->defparam.fixups |= UPROBE_FIX_RIP_SI; auprobe 435 arch/x86/kernel/uprobes.c auprobe->defparam.fixups |= UPROBE_FIX_RIP_DI; auprobe 439 arch/x86/kernel/uprobes.c auprobe->defparam.fixups |= UPROBE_FIX_RIP_BX; auprobe 446 arch/x86/kernel/uprobes.c cursor = auprobe->insn + insn_offset_modrm(insn); auprobe 456 arch/x86/kernel/uprobes.c scratch_reg(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 458 arch/x86/kernel/uprobes.c if (auprobe->defparam.fixups & UPROBE_FIX_RIP_SI) auprobe 460 arch/x86/kernel/uprobes.c if (auprobe->defparam.fixups & UPROBE_FIX_RIP_DI) auprobe 469 arch/x86/kernel/uprobes.c static void riprel_pre_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 471 arch/x86/kernel/uprobes.c if (auprobe->defparam.fixups & UPROBE_FIX_RIP_MASK) { auprobe 473 arch/x86/kernel/uprobes.c unsigned long *sr = scratch_reg(auprobe, regs); auprobe 476 arch/x86/kernel/uprobes.c *sr = utask->vaddr + auprobe->defparam.ilen; auprobe 480 arch/x86/kernel/uprobes.c static void riprel_post_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 482 arch/x86/kernel/uprobes.c if (auprobe->defparam.fixups & UPROBE_FIX_RIP_MASK) { auprobe 484 arch/x86/kernel/uprobes.c unsigned long *sr = scratch_reg(auprobe, regs); auprobe 493 arch/x86/kernel/uprobes.c static void riprel_analyze(struct arch_uprobe *auprobe, struct insn *insn) auprobe 496 arch/x86/kernel/uprobes.c static void riprel_pre_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 499 arch/x86/kernel/uprobes.c static void riprel_post_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 519 arch/x86/kernel/uprobes.c static int default_pre_xol_op(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 521 arch/x86/kernel/uprobes.c riprel_pre_xol(auprobe, regs); auprobe 553 arch/x86/kernel/uprobes.c static int default_post_xol_op(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 557 arch/x86/kernel/uprobes.c riprel_post_xol(auprobe, regs); auprobe 558 arch/x86/kernel/uprobes.c if (auprobe->defparam.fixups & UPROBE_FIX_IP) { auprobe 561 arch/x86/kernel/uprobes.c } else if (auprobe->defparam.fixups & UPROBE_FIX_CALL) { auprobe 563 arch/x86/kernel/uprobes.c if (emulate_push_stack(regs, utask->vaddr + auprobe->defparam.ilen)) auprobe 567 arch/x86/kernel/uprobes.c if (auprobe->defparam.fixups & UPROBE_FIX_SETF) auprobe 573 arch/x86/kernel/uprobes.c static void default_abort_op(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 575 arch/x86/kernel/uprobes.c riprel_post_xol(auprobe, regs); auprobe 584 arch/x86/kernel/uprobes.c static bool branch_is_call(struct arch_uprobe *auprobe) auprobe 586 arch/x86/kernel/uprobes.c return auprobe->branch.opc1 == 0xe8; auprobe 618 arch/x86/kernel/uprobes.c static bool check_jmp_cond(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 622 arch/x86/kernel/uprobes.c switch (auprobe->branch.opc1) { auprobe 637 arch/x86/kernel/uprobes.c static bool branch_emulate_op(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 639 arch/x86/kernel/uprobes.c unsigned long new_ip = regs->ip += auprobe->branch.ilen; auprobe 640 arch/x86/kernel/uprobes.c unsigned long offs = (long)auprobe->branch.offs; auprobe 642 arch/x86/kernel/uprobes.c if (branch_is_call(auprobe)) { auprobe 654 arch/x86/kernel/uprobes.c } else if (!check_jmp_cond(auprobe, regs)) { auprobe 662 arch/x86/kernel/uprobes.c static bool push_emulate_op(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 664 arch/x86/kernel/uprobes.c unsigned long *src_ptr = (void *)regs + auprobe->push.reg_offset; auprobe 668 arch/x86/kernel/uprobes.c regs->ip += auprobe->push.ilen; auprobe 672 arch/x86/kernel/uprobes.c static int branch_post_xol_op(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 674 arch/x86/kernel/uprobes.c BUG_ON(!branch_is_call(auprobe)); auprobe 685 arch/x86/kernel/uprobes.c static void branch_clear_offset(struct arch_uprobe *auprobe, struct insn *insn) auprobe 701 arch/x86/kernel/uprobes.c memset(auprobe->insn + insn_offset_immediate(insn), auprobe 715 arch/x86/kernel/uprobes.c static int branch_setup_xol_ops(struct arch_uprobe *auprobe, struct insn *insn) auprobe 727 arch/x86/kernel/uprobes.c branch_clear_offset(auprobe, insn); auprobe 754 arch/x86/kernel/uprobes.c auprobe->branch.opc1 = opc1; auprobe 755 arch/x86/kernel/uprobes.c auprobe->branch.ilen = insn->length; auprobe 756 arch/x86/kernel/uprobes.c auprobe->branch.offs = insn->immediate.value; auprobe 758 arch/x86/kernel/uprobes.c auprobe->ops = &branch_xol_ops; auprobe 763 arch/x86/kernel/uprobes.c static int push_setup_xol_ops(struct arch_uprobe *auprobe, struct insn *insn) auprobe 837 arch/x86/kernel/uprobes.c auprobe->push.reg_offset = reg_offset; auprobe 838 arch/x86/kernel/uprobes.c auprobe->push.ilen = insn->length; auprobe 839 arch/x86/kernel/uprobes.c auprobe->ops = &push_xol_ops; auprobe 850 arch/x86/kernel/uprobes.c int arch_uprobe_analyze_insn(struct arch_uprobe *auprobe, struct mm_struct *mm, unsigned long addr) auprobe 856 arch/x86/kernel/uprobes.c ret = uprobe_init_insn(auprobe, &insn, is_64bit_mm(mm)); auprobe 860 arch/x86/kernel/uprobes.c ret = branch_setup_xol_ops(auprobe, &insn); auprobe 864 arch/x86/kernel/uprobes.c ret = push_setup_xol_ops(auprobe, &insn); auprobe 874 arch/x86/kernel/uprobes.c auprobe->defparam.fixups |= UPROBE_FIX_SETF; auprobe 897 arch/x86/kernel/uprobes.c riprel_analyze(auprobe, &insn); auprobe 900 arch/x86/kernel/uprobes.c auprobe->defparam.ilen = insn.length; auprobe 901 arch/x86/kernel/uprobes.c auprobe->defparam.fixups |= fix_ip_or_call; auprobe 903 arch/x86/kernel/uprobes.c auprobe->ops = &default_xol_ops; auprobe 912 arch/x86/kernel/uprobes.c int arch_uprobe_pre_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 916 arch/x86/kernel/uprobes.c if (auprobe->ops->pre_xol) { auprobe 917 arch/x86/kernel/uprobes.c int err = auprobe->ops->pre_xol(auprobe, regs); auprobe 959 arch/x86/kernel/uprobes.c int arch_uprobe_post_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 968 arch/x86/kernel/uprobes.c if (auprobe->ops->post_xol) { auprobe 969 arch/x86/kernel/uprobes.c err = auprobe->ops->post_xol(auprobe, regs); auprobe 1030 arch/x86/kernel/uprobes.c void arch_uprobe_abort_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 1034 arch/x86/kernel/uprobes.c if (auprobe->ops->abort) auprobe 1035 arch/x86/kernel/uprobes.c auprobe->ops->abort(auprobe, regs); auprobe 1044 arch/x86/kernel/uprobes.c static bool __skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 1046 arch/x86/kernel/uprobes.c if (auprobe->ops->emulate) auprobe 1047 arch/x86/kernel/uprobes.c return auprobe->ops->emulate(auprobe, regs); auprobe 1051 arch/x86/kernel/uprobes.c bool arch_uprobe_skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs) auprobe 1053 arch/x86/kernel/uprobes.c bool ret = __skip_sstep(auprobe, regs); auprobe 112 include/linux/uprobes.h extern int uprobe_write_opcode(struct arch_uprobe *auprobe, struct mm_struct *mm, unsigned long vaddr, uprobe_opcode_t); auprobe 469 kernel/events/uprobes.c int uprobe_write_opcode(struct arch_uprobe *auprobe, struct mm_struct *mm, auprobe 480 kernel/events/uprobes.c uprobe = container_of(auprobe, struct uprobe, arch); auprobe 580 kernel/events/uprobes.c int __weak set_swbp(struct arch_uprobe *auprobe, struct mm_struct *mm, unsigned long vaddr) auprobe 582 kernel/events/uprobes.c return uprobe_write_opcode(auprobe, mm, vaddr, UPROBE_SWBP_INSN); auprobe 595 kernel/events/uprobes.c set_orig_insn(struct arch_uprobe *auprobe, struct mm_struct *mm, unsigned long vaddr) auprobe 597 kernel/events/uprobes.c return uprobe_write_opcode(auprobe, mm, vaddr, auprobe 598 kernel/events/uprobes.c *(uprobe_opcode_t *)&auprobe->insn);