Messages in this thread | | | Date | Mon, 12 Mar 2018 19:27:38 +0900 | From | Masami Hiramatsu <> | Subject | Re: [BUGFIX PATCH bpf-next] error-injection: Fix to prohibit jump optimization |
| |
On Mon, 12 Mar 2018 19:00:49 +0900 Masami Hiramatsu <mhiramat@kernel.org> wrote:
> Since the kprobe which was optimized by jump can not change > the execution path, the kprobe for error-injection must not > be optimized. To prohibit it, set a dummy post-handler as > officially stated in Documentation/kprobes.txt.
Note that trace-probe based BPF is not affected, because it ensures the trace-probe is based on ftrace, which is not jump optimized.
Thanks,
> > Fixes: 4b1a29a7f542 ("error-injection: Support fault injection framework") > Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org> > --- > kernel/fail_function.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/kernel/fail_function.c b/kernel/fail_function.c > index 21b0122cb39c..1d5632d8bbcc 100644 > --- a/kernel/fail_function.c > +++ b/kernel/fail_function.c > @@ -14,6 +14,15 @@ > > static int fei_kprobe_handler(struct kprobe *kp, struct pt_regs *regs); > > +static void fei_post_handler(struct kprobe *kp, struct pt_regs *regs, > + unsigned long flags) > +{ > + /* > + * A dummy post handler is required to prohibit optimizing, because > + * jump optimization does not support execution path overriding. > + */ > +} > + > struct fei_attr { > struct list_head list; > struct kprobe kp; > @@ -56,6 +65,7 @@ static struct fei_attr *fei_attr_new(const char *sym, unsigned long addr) > return NULL; > } > attr->kp.pre_handler = fei_kprobe_handler; > + attr->kp.post_handler = fei_post_handler; > attr->retval = adjust_error_retval(addr, 0); > INIT_LIST_HEAD(&attr->list); > } >
-- Masami Hiramatsu <mhiramat@kernel.org>
| |