Messages in this thread | | | Date | Tue, 21 Oct 2014 18:30:56 +0900 | From | Masami Hiramatsu <> | Subject | Re: [PATCH v3 1/2] kprobes: introduce weak arch_check_ftrace_location() helper function |
| |
(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 <heiko.carstens@de.ibm.com>
Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
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: masami.hiramatsu.pt@hitachi.com
| |