From mboxrd@z Thu Jan 1 00:00:00 1970 From: Masami Hiramatsu Subject: Re: [BUGFIX PATCH bpf-next] error-injection: Fix to prohibit jump optimization Date: Mon, 12 Mar 2018 19:27:38 +0900 Message-ID: <20180312192738.77061ec53f9437d960b437d9@kernel.org> References: <152084884886.1536.4464134247603910765.stgit@devbox> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Cc: Alexei Starovoitov , Josef Bacik , rostedt@goodmis.org, mingo@redhat.com, davem@davemloft.net, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, ast@kernel.org, kernel-team@fb.com, daniel@iogearbox.net, linux-btrfs@vger.kernel.org, darrick.wong@oracle.com, Josef Bacik , Akinobu Mita To: Masami Hiramatsu Return-path: In-Reply-To: <152084884886.1536.4464134247603910765.stgit@devbox> Sender: linux-kernel-owner@vger.kernel.org List-Id: netdev.vger.kernel.org On Mon, 12 Mar 2018 19:00:49 +0900 Masami Hiramatsu 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 > --- > 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