From: Masami Hiramatsu <mhiramat@kernel.org>
To: Alexei Starovoitov <ast@fb.com>
Cc: Steven Rostedt <rostedt@goodmis.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
Alexei Starovoitov <alexei.starovoitov@gmail.com>,
Josef Bacik <jbacik@fb.com>, <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 <josef@toxicpanda.com>,
Akinobu Mita <akinobu.mita@gmail.com>
Subject: Re: [RFC PATCH bpf-next v2 1/4] tracing/kprobe: bpf: Check error injectable event is on function entry
Date: Thu, 28 Dec 2017 17:20:27 +0900 [thread overview]
Message-ID: <20171228172027.4a8f2f0cf0506499acd26738@kernel.org> (raw)
In-Reply-To: <c66a969f-6854-ffa5-502d-bd194c5536bc@fb.com>
On Wed, 27 Dec 2017 20:32:07 -0800
Alexei Starovoitov <ast@fb.com> wrote:
> On 12/27/17 8:16 PM, Steven Rostedt wrote:
> > On Wed, 27 Dec 2017 19:45:42 -0800
> > Alexei Starovoitov <ast@fb.com> wrote:
> >
> >> I don't think that's the case. My reading of current
> >> trace_kprobe_ftrace() -> arch_check_ftrace_location()
> >> is that it will not be true for old mcount case.
> >
> > In the old mcount case, you can't use ftrace to return without calling
> > the function. That is, no modification of the return ip, unless you
> > created a trampoline that could handle arbitrary stack frames, and
> > remove them from the stack before returning back to the function.
>
> correct. I was saying that trace_kprobe_ftrace() won't let us do
> bpf_override_return with old mcount.
No, trace_kprobe_ftrace() just checks the given address will be
managed by ftrace. you can see arch_check_ftrace_location() in kernel/kprobes.c.
FYI, CONFIG_KPROBES_ON_FTRACE depends on DYNAMIC_FTRACE_WITH_REGS, and
DYNAMIC_FTRACE_WITH_REGS doesn't depend on CC_USING_FENTRY.
This means if you compile kernel with old gcc and enable DYNAMIC_FTRACE,
kprobes uses ftrace on mcount address which is NOT the entry point
of target function.
On the other hand, changing IP feature has been implemented originaly
by kprobes with int3 (sw breakpoint). This means you can use kprobes
at correct address (the entry address of the function) you can hijack
the function, as jprobe did.
> >> As far as the rest of your arguments it very much puzzles me that
> >> you claim that this patch suppose to work based on historical
> >> reasoning whereas you did NOT test it.
> >
> > I believe that Masami is saying that the modification of the IP from
> > kprobes has been very well tested. But I'm guessing that you still want
> > a test case for using kprobes in this particular instance. It's not the
> > implementation of modifying the IP that you are worried about, but the
> > implementation of BPF using it in this case. Right?
>
> exactly. No doubt that old code works.
> But it doesn't mean that bpf_override_return() will continue to
> work in kprobes that are not ftrace based.
> I suspect Josef's existing test case will cover this situation.
> Probably only special .config is needed to disable ftrace, so
> "kprobe on entry but not ftrace" check will kick in.
Right. If you need to test it, you can run Josef's test case without
CONFIG_DYNAMIC_FTRACE.
> But I didn't get an impression that this situation was tested.
> Instead I see only logical reasoning that it's _supposed_ to work.
> That's not enough.
OK, so would you just ask me to run samples/bpf ?
Thanks,
--
Masami Hiramatsu <mhiramat@kernel.org>
next prev parent reply other threads:[~2017-12-28 8:20 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-26 7:46 [RFC PATCH bpf-next v2 0/4] Separate error injection table from kprobes Masami Hiramatsu
2017-12-26 7:46 ` [RFC PATCH bpf-next v2 1/4] tracing/kprobe: bpf: Check error injectable event is on function entry Masami Hiramatsu
2017-12-27 1:57 ` Alexei Starovoitov
2017-12-27 5:56 ` Masami Hiramatsu
2017-12-27 22:46 ` Alexei Starovoitov
2017-12-28 2:34 ` Masami Hiramatsu
2017-12-28 3:45 ` Alexei Starovoitov
2017-12-28 4:16 ` Steven Rostedt
2017-12-28 4:32 ` Alexei Starovoitov
2017-12-28 8:20 ` Masami Hiramatsu [this message]
2017-12-29 1:03 ` Alexei Starovoitov
2017-12-29 8:20 ` Masami Hiramatsu
2018-01-08 3:01 ` Alexei Starovoitov
2018-01-08 13:21 ` Masami Hiramatsu
2017-12-28 7:56 ` Masami Hiramatsu
2017-12-26 7:47 ` [RFC PATCH bpf-next v2 2/4] tracing/kprobe: bpf: Compare instruction pointer with original one Masami Hiramatsu
2017-12-27 2:00 ` Alexei Starovoitov
2017-12-26 7:47 ` [RFC PATCH bpf-next v2 3/4] error-injection: Separate error-injection from kprobe Masami Hiramatsu
2017-12-27 2:07 ` Alexei Starovoitov
2017-12-26 7:48 ` [RFC PATCH bpf-next v2 4/4] error-injection: Support fault injection framework Masami Hiramatsu
2017-12-27 2:12 ` Alexei Starovoitov
2017-12-27 8:09 ` Masami Hiramatsu
2017-12-27 22:49 ` Alexei Starovoitov
2017-12-28 1:38 ` Masami Hiramatsu
2017-12-28 3:49 ` Alexei Starovoitov
2017-12-28 7:51 ` Masami Hiramatsu
2017-12-29 1:11 ` Alexei Starovoitov
2017-12-29 7:34 ` Masami Hiramatsu
2018-01-04 16:07 ` [RFC PATCH bpf-next v2 0/4] Separate error injection table from kprobes Josef Bacik
2018-01-09 1:17 ` Masami Hiramatsu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171228172027.4a8f2f0cf0506499acd26738@kernel.org \
--to=mhiramat@kernel.org \
--cc=akinobu.mita@gmail.com \
--cc=alexei.starovoitov@gmail.com \
--cc=ast@fb.com \
--cc=ast@kernel.org \
--cc=daniel@iogearbox.net \
--cc=darrick.wong@oracle.com \
--cc=davem@davemloft.net \
--cc=jbacik@fb.com \
--cc=josef@toxicpanda.com \
--cc=kernel-team@fb.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=rostedt@goodmis.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox