1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Kernel Probes (KProbes)
5 * Copyright (C) IBM Corporation, 2002, 2004
7 * 2002-Oct Created by Vamsi Krishna S <vamsi_krishna@in.ibm.com> Kernel
8 * Probes initial implementation ( includes contributions from
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
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/set_memory.h>
23 #include <linux/execmem.h>
24 #include <asm/text-patching.h>
25 #include <asm/cacheflush.h>
26 #include <asm/sstep.h>
27 #include <asm/sections.h>
29 #include <linux/uaccess.h>
31 DEFINE_PER_CPU(struct kprobe
*, current_kprobe
) = NULL
;
32 DEFINE_PER_CPU(struct kprobe_ctlblk
, kprobe_ctlblk
);
34 struct kretprobe_blackpoint kretprobe_blacklist
[] = {{NULL
, NULL
}};
36 bool arch_within_kprobe_blacklist(unsigned long addr
)
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
);
44 kprobe_opcode_t
*kprobe_lookup_name(const char *name
, unsigned int offset
)
46 kprobe_opcode_t
*addr
= NULL
;
48 #ifdef CONFIG_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
55 * Per livepatch.h, ftrace location is always within the first
56 * 16 bytes of a function on powerpc with -mprofile-kernel.
58 faddr
= ftrace_location_range((unsigned long)addr
,
59 (unsigned long)addr
+ 16);
61 addr
= (kprobe_opcode_t
*)faddr
;
64 addr
= (kprobe_opcode_t
*)ppc_function_entry(addr
);
66 #elif defined(CONFIG_PPC64_ELF_ABI_V1)
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.
72 * This ensures we always get to the actual symbol and not
75 * Also handle <module:symbol> format.
77 char dot_name
[MODULE_NAME_LEN
+ 1 + KSYM_NAME_LEN
];
78 bool dot_appended
= false;
83 if ((c
= strnchr(name
, MODULE_NAME_LEN
, ':')) != NULL
) {
86 memcpy(dot_name
, name
, len
);
90 if (*c
!= '\0' && *c
!= '.') {
91 dot_name
[len
++] = '.';
94 ret
= strscpy(dot_name
+ len
, c
, KSYM_NAME_LEN
);
96 addr
= (kprobe_opcode_t
*)kallsyms_lookup_name(dot_name
);
98 /* Fallback to the original non-dot symbol lookup */
99 if (!addr
&& dot_appended
)
100 addr
= (kprobe_opcode_t
*)kallsyms_lookup_name(name
);
102 addr
= (kprobe_opcode_t
*)kallsyms_lookup_name(name
);
108 static bool arch_kprobe_on_func_entry(unsigned long addr
, unsigned long offset
)
110 unsigned long ip
= ftrace_location(addr
);
113 return offset
<= (ip
- addr
);
114 if (IS_ENABLED(CONFIG_PPC64_ELF_ABI_V2
) && !IS_ENABLED(CONFIG_PPC_KERNEL_PCREL
))
119 /* XXX try and fold the magic of kprobe_lookup_name() in this */
120 kprobe_opcode_t
*arch_adjust_kprobe_addr(unsigned long addr
, unsigned long offset
,
123 *on_func_entry
= arch_kprobe_on_func_entry(addr
, offset
);
124 return (kprobe_opcode_t
*)(addr
+ offset
);
127 int arch_prepare_kprobe(struct kprobe
*p
)
131 ppc_inst_t insn
= ppc_inst_read(p
->addr
);
133 if ((unsigned long)p
->addr
& 0x03) {
134 printk("Attempt to register kprobe at an unaligned address\n");
136 } else if (!can_single_step(ppc_inst_val(insn
))) {
137 printk("Cannot register a kprobe on instructions that can't be single stepped\n");
139 } else if ((unsigned long)p
->addr
& ~PAGE_MASK
&&
140 ppc_inst_prefixed(ppc_inst_read(p
->addr
- 1))) {
141 printk("Cannot register a kprobe on the second word of prefixed instruction\n");
144 prev
= get_kprobe(p
->addr
- 1);
147 * When prev is a ftrace-based kprobe, we don't have an insn, and it
148 * doesn't probe for prefixed instruction.
150 if (prev
&& !kprobe_ftrace(prev
) &&
151 ppc_inst_prefixed(ppc_inst_read(prev
->ainsn
.insn
))) {
152 printk("Cannot register a kprobe on the second word of prefixed instruction\n");
156 /* insn must be on a special executable page on ppc64. This is
157 * not explicitly required on ppc32 (right now), but it doesn't hurt */
159 p
->ainsn
.insn
= get_insn_slot();
165 patch_instruction(p
->ainsn
.insn
, insn
);
166 p
->opcode
= ppc_inst_val(insn
);
169 p
->ainsn
.boostable
= 0;
172 NOKPROBE_SYMBOL(arch_prepare_kprobe
);
174 void arch_arm_kprobe(struct kprobe
*p
)
176 WARN_ON_ONCE(patch_instruction(p
->addr
, ppc_inst(BREAKPOINT_INSTRUCTION
)));
178 NOKPROBE_SYMBOL(arch_arm_kprobe
);
180 void arch_disarm_kprobe(struct kprobe
*p
)
182 WARN_ON_ONCE(patch_instruction(p
->addr
, ppc_inst(p
->opcode
)));
184 NOKPROBE_SYMBOL(arch_disarm_kprobe
);
186 void arch_remove_kprobe(struct kprobe
*p
)
189 free_insn_slot(p
->ainsn
.insn
, 0);
190 p
->ainsn
.insn
= NULL
;
193 NOKPROBE_SYMBOL(arch_remove_kprobe
);
195 static nokprobe_inline
void prepare_singlestep(struct kprobe
*p
, struct pt_regs
*regs
)
197 enable_single_step(regs
);
200 * On powerpc we should single step on the original
201 * instruction even if the probed insn is a trap
202 * variant as values in regs could play a part in
203 * if the trap is taken or not
205 regs_set_return_ip(regs
, (unsigned long)p
->ainsn
.insn
);
208 static nokprobe_inline
void save_previous_kprobe(struct kprobe_ctlblk
*kcb
)
210 kcb
->prev_kprobe
.kp
= kprobe_running();
211 kcb
->prev_kprobe
.status
= kcb
->kprobe_status
;
212 kcb
->prev_kprobe
.saved_msr
= kcb
->kprobe_saved_msr
;
215 static nokprobe_inline
void restore_previous_kprobe(struct kprobe_ctlblk
*kcb
)
217 __this_cpu_write(current_kprobe
, kcb
->prev_kprobe
.kp
);
218 kcb
->kprobe_status
= kcb
->prev_kprobe
.status
;
219 kcb
->kprobe_saved_msr
= kcb
->prev_kprobe
.saved_msr
;
222 static nokprobe_inline
void set_current_kprobe(struct kprobe
*p
, struct pt_regs
*regs
,
223 struct kprobe_ctlblk
*kcb
)
225 __this_cpu_write(current_kprobe
, p
);
226 kcb
->kprobe_saved_msr
= regs
->msr
;
229 static int try_to_emulate(struct kprobe
*p
, struct pt_regs
*regs
)
232 ppc_inst_t insn
= ppc_inst_read(p
->ainsn
.insn
);
234 /* regs->nip is also adjusted if emulate_step returns 1 */
235 ret
= emulate_step(regs
, insn
);
238 * Once this instruction has been boosted
239 * successfully, set the boostable flag
241 if (unlikely(p
->ainsn
.boostable
== 0))
242 p
->ainsn
.boostable
= 1;
243 } else if (ret
< 0) {
245 * We don't allow kprobes on mtmsr(d)/rfi(d), etc.
246 * So, we should never get here... but, its still
247 * good to catch them, just in case...
249 printk("Can't step on instruction %08lx\n", ppc_inst_as_ulong(insn
));
253 * If we haven't previously emulated this instruction, then it
254 * can't be boosted. Note it down so we don't try to do so again.
256 * If, however, we had emulated this instruction in the past,
257 * then this is just an error with the current run (for
258 * instance, exceptions due to a load/store). We return 0 so
259 * that this is now single-stepped, but continue to try
260 * emulating it in subsequent probe hits.
262 if (unlikely(p
->ainsn
.boostable
!= 1))
263 p
->ainsn
.boostable
= -1;
268 NOKPROBE_SYMBOL(try_to_emulate
);
270 int kprobe_handler(struct pt_regs
*regs
)
274 unsigned int *addr
= (unsigned int *)regs
->nip
;
275 struct kprobe_ctlblk
*kcb
;
280 if (!IS_ENABLED(CONFIG_BOOKE
) &&
281 (!(regs
->msr
& MSR_IR
) || !(regs
->msr
& MSR_DR
)))
285 * We don't want to be preempted for the entire
286 * duration of kprobe processing
289 kcb
= get_kprobe_ctlblk();
291 p
= get_kprobe(addr
);
295 if (get_kernel_nofault(instr
, addr
))
298 if (instr
!= BREAKPOINT_INSTRUCTION
) {
300 * PowerPC has multiple variants of the "trap"
301 * instruction. If the current instruction is a
302 * trap variant, it could belong to someone else
307 * The breakpoint instruction was removed right
308 * after we hit it. Another cpu has removed
309 * either a probepoint or a debugger breakpoint
310 * at this address. In either case, no further
311 * handling of this interrupt is appropriate.
315 /* Not one of ours: let kernel handle it */
319 /* Check we're not actually recursing */
320 if (kprobe_running()) {
321 kprobe_opcode_t insn
= *p
->ainsn
.insn
;
322 if (kcb
->kprobe_status
== KPROBE_HIT_SS
&& is_trap(insn
)) {
323 /* Turn off 'trace' bits */
324 regs_set_return_msr(regs
,
325 (regs
->msr
& ~MSR_SINGLESTEP
) |
326 kcb
->kprobe_saved_msr
);
331 * We have reentered the kprobe_handler(), since another probe
332 * was hit while within the handler. We here save the original
333 * kprobes variables and just single step on the instruction of
334 * the new probe without calling any user handlers.
336 save_previous_kprobe(kcb
);
337 set_current_kprobe(p
, regs
, kcb
);
338 kprobes_inc_nmissed_count(p
);
339 kcb
->kprobe_status
= KPROBE_REENTER
;
340 if (p
->ainsn
.boostable
>= 0) {
341 ret
= try_to_emulate(p
, regs
);
344 restore_previous_kprobe(kcb
);
349 prepare_singlestep(p
, regs
);
353 kcb
->kprobe_status
= KPROBE_HIT_ACTIVE
;
354 set_current_kprobe(p
, regs
, kcb
);
355 if (p
->pre_handler
&& p
->pre_handler(p
, regs
)) {
356 /* handler changed execution path, so skip ss setup */
357 reset_current_kprobe();
362 if (p
->ainsn
.boostable
>= 0) {
363 ret
= try_to_emulate(p
, regs
);
367 p
->post_handler(p
, regs
, 0);
369 kcb
->kprobe_status
= KPROBE_HIT_SSDONE
;
370 reset_current_kprobe();
375 prepare_singlestep(p
, regs
);
376 kcb
->kprobe_status
= KPROBE_HIT_SS
;
383 NOKPROBE_SYMBOL(kprobe_handler
);
386 * Called after single-stepping. p->addr is the address of the
387 * instruction whose first byte has been replaced by the "breakpoint"
388 * instruction. To avoid the SMP problems that can occur when we
389 * temporarily put back the original opcode to single-step, we
390 * single-stepped a copy of the instruction. The address of this
391 * copy is p->ainsn.insn.
393 int kprobe_post_handler(struct pt_regs
*regs
)
396 struct kprobe
*cur
= kprobe_running();
397 struct kprobe_ctlblk
*kcb
= get_kprobe_ctlblk();
399 if (!cur
|| user_mode(regs
))
402 len
= ppc_inst_len(ppc_inst_read(cur
->ainsn
.insn
));
403 /* make sure we got here for instruction we have a kprobe on */
404 if (((unsigned long)cur
->ainsn
.insn
+ len
) != regs
->nip
)
407 if ((kcb
->kprobe_status
!= KPROBE_REENTER
) && cur
->post_handler
) {
408 kcb
->kprobe_status
= KPROBE_HIT_SSDONE
;
409 cur
->post_handler(cur
, regs
, 0);
412 /* Adjust nip to after the single-stepped instruction */
413 regs_set_return_ip(regs
, (unsigned long)cur
->addr
+ len
);
414 regs_set_return_msr(regs
, regs
->msr
| kcb
->kprobe_saved_msr
);
416 /*Restore back the original saved kprobes variables and continue. */
417 if (kcb
->kprobe_status
== KPROBE_REENTER
) {
418 restore_previous_kprobe(kcb
);
421 reset_current_kprobe();
426 * if somebody else is singlestepping across a probe point, msr
427 * will have DE/SE set, in which case, continue the remaining processing
428 * of do_debug, as if this is not a probe hit.
430 if (regs
->msr
& MSR_SINGLESTEP
)
435 NOKPROBE_SYMBOL(kprobe_post_handler
);
437 int kprobe_fault_handler(struct pt_regs
*regs
, int trapnr
)
439 struct kprobe
*cur
= kprobe_running();
440 struct kprobe_ctlblk
*kcb
= get_kprobe_ctlblk();
441 const struct exception_table_entry
*entry
;
443 switch(kcb
->kprobe_status
) {
447 * We are here because the instruction being single
448 * stepped caused a page fault. We reset the current
449 * kprobe and the nip points back to the probe address
450 * and allow the page fault handler to continue as a
453 regs_set_return_ip(regs
, (unsigned long)cur
->addr
);
454 /* Turn off 'trace' bits */
455 regs_set_return_msr(regs
,
456 (regs
->msr
& ~MSR_SINGLESTEP
) |
457 kcb
->kprobe_saved_msr
);
458 if (kcb
->kprobe_status
== KPROBE_REENTER
)
459 restore_previous_kprobe(kcb
);
461 reset_current_kprobe();
464 case KPROBE_HIT_ACTIVE
:
465 case KPROBE_HIT_SSDONE
:
467 * In case the user-specified fault handler returned
468 * zero, try to fix up.
470 if ((entry
= search_exception_tables(regs
->nip
)) != NULL
) {
471 regs_set_return_ip(regs
, extable_fixup(entry
));
476 * fixup_exception() could not handle it,
477 * Let do_page_fault() fix it.
485 NOKPROBE_SYMBOL(kprobe_fault_handler
);
487 int arch_trampoline_kprobe(struct kprobe
*p
)
489 if (p
->addr
== (kprobe_opcode_t
*)&arch_rethook_trampoline
)
494 NOKPROBE_SYMBOL(arch_trampoline_kprobe
);