(2014/10/21 17:30), Heiko Carstens wrote: > Introduce weak arch_check_ftrace_location() helper function which > architectures can override in order to implement handling of kprobes > on function tracer call sites on their own, without depending on > common code or implementing the KPROBES_ON_FTRACE feature. > > Signed-off-by: Heiko Carstens <[email protected]>
Acked-by: Masami Hiramatsu <[email protected]> Thanks! > --- > include/linux/kprobes.h | 1 + > kernel/kprobes.c | 18 +++++++++++------- > 2 files changed, 12 insertions(+), 7 deletions(-) > > diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h > index f7296e57d614..5297f9fa0ef2 100644 > --- a/include/linux/kprobes.h > +++ b/include/linux/kprobes.h > @@ -335,6 +335,7 @@ extern void kprobe_ftrace_handler(unsigned long ip, > unsigned long parent_ip, > extern int arch_prepare_kprobe_ftrace(struct kprobe *p); > #endif > > +int arch_check_ftrace_location(struct kprobe *p); > > /* Get the kprobe at this addr (if any) - called with preemption disabled */ > struct kprobe *get_kprobe(void *addr); > diff --git a/kernel/kprobes.c b/kernel/kprobes.c > index 3995f546d0f3..317eb8ad28dd 100644 > --- a/kernel/kprobes.c > +++ b/kernel/kprobes.c > @@ -1410,16 +1410,10 @@ static inline int check_kprobe_rereg(struct kprobe *p) > return ret; > } > > -static int check_kprobe_address_safe(struct kprobe *p, > - struct module **probed_mod) > +int __weak arch_check_ftrace_location(struct kprobe *p) > { > - int ret = 0; > unsigned long ftrace_addr; > > - /* > - * If the address is located on a ftrace nop, set the > - * breakpoint to the following instruction. > - */ > ftrace_addr = ftrace_location((unsigned long)p->addr); > if (ftrace_addr) { > #ifdef CONFIG_KPROBES_ON_FTRACE > @@ -1431,7 +1425,17 @@ static int check_kprobe_address_safe(struct kprobe *p, > return -EINVAL; > #endif > } > + return 0; > +} > > +static int check_kprobe_address_safe(struct kprobe *p, > + struct module **probed_mod) > +{ > + int ret; > + > + ret = arch_check_ftrace_location(p); > + if (ret) > + return ret; > jump_label_lock(); > preempt_disable(); > > -- Masami HIRAMATSU Software Platform Research Dept. Linux Technology Research Center Hitachi, Ltd., Yokohama Research Laboratory E-mail: [email protected] -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

