From: Josef Bacik <josef@toxicpanda.com>
To: Ingo Molnar <mingo@kernel.org>
Cc: Alexei Starovoitov <ast@fb.com>,
Josef Bacik <josef@toxicpanda.com>,
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,
Josef Bacik <jbacik@fb.com>
Subject: Re: [PATCH 1/2] bpf: add a bpf_override_function helper
Date: Mon, 13 Nov 2017 10:57:54 -0500 [thread overview]
Message-ID: <20171113155752.yhzxm4kpihg4ns65@destiny> (raw)
In-Reply-To: <20171112103824.433mm7caxsuhoj2g@gmail.com>
On Sun, Nov 12, 2017 at 11:38:24AM +0100, Ingo Molnar wrote:
>
> * Alexei Starovoitov <ast@fb.com> wrote:
>
> > > One of the major advantages of having an in-kernel BPF sandbox is to never
> > > crash the kernel - and allowing BPF programs to just randomly modify the
> > > return value of kernel functions sounds immensely broken to me.
> > >
> > > (And yes, I realize that kprobes are used here as a vehicle, but the point
> > > remains.)
> >
> > yeah. modifying arbitrary function return pushes bpf outside of
> > its safety guarantees and in that sense doing the same
> > override_return could be done from a kernel module if kernel
> > provides the x64 side of the facility introduced by this patch.
> > On the other side adding parts of this feature to the kernel only
> > to be used by external kernel module is quite ugly too and not
> > something that was ever done before.
> > How about we restrict this bpf_override_return() only to the functions
> > which callers expect to handle errors ?
> > We can add something similar to NOKPROBE_SYMBOL(). Like
> > ALLOW_RETURN_OVERRIDE() and on btrfs side mark the functions
> > we're going to test with this feature.
> >
> > Then 'not crashing kernel' requirement will be preserved.
> > btrfs or whatever else we will be testing with override_return
> > will be functioning in 'stress test' mode and if bpf program
> > is not careful and returns error all the time then one particular
> > subsystem (like btrfs) will not be functional, but the kernel
> > will not be crashing.
> > Thoughts?
>
> Yeah, that approach sounds much better to me: it should be fundamentally be
> opt-in, and should be documented that it should not be possible to crash the
> kernel via changing the return value.
>
> I'd make it a bit clearer in the naming what the purpose of the annotation is: for
> example would BPF_ALLOW_ERROR_INJECTION() work for you guys? I.e. I think it
> should generally be used to change actual integer error values - or at most user
> pointers, but not kernel pointers. Not enforced in a type safe manner, but the
> naming should give enough hints?
>
> Such return-injection BFR programs can still totally confuse user-space obviously:
> for example returning an IO error could corrupt application data - but that's the
> nature of such facilities and similar results could already be achieved via ptrace
> as well. But the result of a BPF program should never be _worse_ than ptrace, in
> terms of kernel integrity.
>
> Note that with such a safety mechanism in place no kernel message has to be
> generated either I suspect.
>
> In any case, my NAK would be lifted with such an approach.
>
I'm going to want to annotate kmalloc, so it's still going to be possible to
make things go horribly wrong, is this still going to be ok with you? Obviously
I want to use this for btrfs, but really what I used this for originally was an
NBD problem where I had to do special handling for getting EINTR back from
kernel_sendmsg, which was a pain to trigger properly without this patch. Opt-in
is going to make it so we're just flagging important function calls anwyay
because those are the ones that fail rarely and that we want to test, which puts
us back in the same situation you are worried about, so it doesn't make much
sense to me to do it this way. Thanks,
Josef
next prev parent reply other threads:[~2017-11-13 15:57 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-07 20:28 [PATCH 0/2][v5] Add the ability to do BPF directed error injection Josef Bacik
2017-11-07 20:28 ` [PATCH 1/2] bpf: add a bpf_override_function helper Josef Bacik
2017-11-08 2:28 ` Daniel Borkmann
2017-11-10 9:34 ` Ingo Molnar
2017-11-10 17:14 ` Josef Bacik
2017-11-11 8:14 ` Ingo Molnar
2017-11-11 11:51 ` Josef Bacik
2017-11-12 6:49 ` Alexei Starovoitov
2017-11-12 10:38 ` Ingo Molnar
2017-11-13 15:57 ` Josef Bacik [this message]
2017-11-15 7:34 ` Ingo Molnar
2017-11-07 20:28 ` [PATCH 2/2] samples/bpf: add a test for bpf_override_return Josef Bacik
2017-11-08 2:29 ` Daniel Borkmann
2017-11-07 21:43 ` [PATCH 0/2][v5] Add the ability to do BPF directed error injection Alexei Starovoitov
2017-11-10 9:06 ` David Miller
2017-11-10 9:20 ` Peter Zijlstra
2017-11-11 3:18 ` David Miller
2017-11-11 8:16 ` Ingo Molnar
2017-11-11 9:25 ` David Miller
-- strict thread matches above, loose matches on Subject: below --
2017-11-02 14:37 [PATCH 0/2][v4] " Josef Bacik
2017-11-02 14:37 ` [PATCH 1/2] bpf: add a bpf_override_function helper Josef Bacik
2017-11-02 23:12 ` Daniel Borkmann
2017-11-03 14:31 ` Josef Bacik
2017-11-03 16:52 ` Daniel Borkmann
2017-11-03 21:07 ` Alexei Starovoitov
2017-11-01 17:00 [PATCH 0/2][v3] Add the ability to do BPF directed error injection Josef Bacik
2017-11-01 17:00 ` [PATCH 1/2] bpf: add a bpf_override_function helper Josef Bacik
2017-11-01 17:18 ` Alexei Starovoitov
2017-11-02 1:08 ` Daniel Borkmann
2017-10-31 15:45 [PATCH 0/2][v2] Add the ability to do BPF directed error injection Josef Bacik
2017-10-31 15:45 ` [PATCH 1/2] bpf: add a bpf_override_function helper Josef Bacik
2017-11-01 4:47 ` Alexei Starovoitov
2017-10-30 21:19 [PATCH 0/2] Add the ability to do BPF directed error injection Josef Bacik
2017-10-30 21:19 ` [PATCH 1/2] bpf: add a bpf_override_function helper Josef Bacik
2017-10-31 1:35 ` Alexei Starovoitov
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=20171113155752.yhzxm4kpihg4ns65@destiny \
--to=josef@toxicpanda.com \
--cc=ast@fb.com \
--cc=ast@kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=jbacik@fb.com \
--cc=kernel-team@fb.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@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