From: Jesper Dangaard Brouer <brouer@redhat.com>
To: "Toke Høiland-Jørgensen" <toke@redhat.com>
Cc: David Miller <davem@davemloft.net>,
netdev@vger.kernel.org, Daniel Borkmann <daniel@iogearbox.net>,
Alexei Starovoitov <ast@kernel.org>,
brouer@redhat.com
Subject: Re: [PATCH net-next v2 2/2] devmap: Allow map lookups from eBPF
Date: Thu, 6 Jun 2019 15:33:44 +0200 [thread overview]
Message-ID: <20190606153344.4871ffa2@carbon> (raw)
In-Reply-To: <155982745466.30088.16226777266948206538.stgit@alrua-x1>
On Thu, 06 Jun 2019 15:24:14 +0200
Toke Høiland-Jørgensen <toke@redhat.com> wrote:
> From: Toke Høiland-Jørgensen <toke@redhat.com>
>
> We don't currently allow lookups into a devmap from eBPF, because the map
> lookup returns a pointer directly to the dev->ifindex, which shouldn't be
> modifiable from eBPF.
>
> However, being able to do lookups in devmaps is useful to know (e.g.)
> whether forwarding to a specific interface is enabled. Currently, programs
> work around this by keeping a shadow map of another type which indicates
> whether a map index is valid.
>
> Since we now have a flag to make maps read-only from the eBPF side, we can
> simply lift the lookup restriction if we make sure this flag is always set.
Nice, I didn't know this was possible. I like it! :-)
> Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
> ---
> kernel/bpf/devmap.c | 5 +++++
> kernel/bpf/verifier.c | 7 ++-----
> 2 files changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/kernel/bpf/devmap.c b/kernel/bpf/devmap.c
> index 5ae7cce5ef16..0e6875a462ef 100644
> --- a/kernel/bpf/devmap.c
> +++ b/kernel/bpf/devmap.c
> @@ -99,6 +99,11 @@ static struct bpf_map *dev_map_alloc(union bpf_attr *attr)
> attr->value_size != 4 || attr->map_flags & ~DEV_CREATE_FLAG_MASK)
> return ERR_PTR(-EINVAL);
>
> + /* Lookup returns a pointer straight to dev->ifindex, so make sure the
> + * verifier prevents writes from the BPF side
> + */
> + attr->map_flags |= BPF_F_RDONLY_PROG;
> +
> dtab = kzalloc(sizeof(*dtab), GFP_USER);
> if (!dtab)
> return ERR_PTR(-ENOMEM);
> diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
> index 5c2cb5bd84ce..7128a9821481 100644
> --- a/kernel/bpf/verifier.c
> +++ b/kernel/bpf/verifier.c
> @@ -2893,12 +2893,9 @@ static int check_map_func_compatibility(struct bpf_verifier_env *env,
> if (func_id != BPF_FUNC_get_local_storage)
> goto error;
> break;
> - /* devmap returns a pointer to a live net_device ifindex that we cannot
> - * allow to be modified from bpf side. So do not allow lookup elements
> - * for now.
> - */
> case BPF_MAP_TYPE_DEVMAP:
> - if (func_id != BPF_FUNC_redirect_map)
> + if (func_id != BPF_FUNC_redirect_map &&
> + func_id != BPF_FUNC_map_lookup_elem)
> goto error;
> break;
> /* Restrict bpf side of cpumap and xskmap, open when use-cases
>
--
Best regards,
Jesper Dangaard Brouer
MSc.CS, Principal Kernel Engineer at Red Hat
LinkedIn: http://www.linkedin.com/in/brouer
next prev parent reply other threads:[~2019-06-06 13:34 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-06 13:24 [PATCH net-next v2 0/2] xdp: Allow lookup into devmaps before redirect Toke Høiland-Jørgensen
2019-06-06 13:24 ` [PATCH net-next v2 1/2] bpf_xdp_redirect_map: Add flag to return XDP_PASS on map lookup failure Toke Høiland-Jørgensen
2019-06-06 15:51 ` Daniel Borkmann
2019-06-06 15:56 ` Alexei Starovoitov
2019-06-06 16:15 ` Toke Høiland-Jørgensen
2019-06-06 18:15 ` Jonathan Lemon
2019-06-06 19:24 ` Daniel Borkmann
2019-06-06 20:13 ` Jonathan Lemon
2019-06-06 21:14 ` Toke Høiland-Jørgensen
2019-06-06 21:53 ` Jonathan Lemon
2019-06-06 22:31 ` Toke Høiland-Jørgensen
2019-06-06 13:24 ` [PATCH net-next v2 2/2] devmap: Allow map lookups from eBPF Toke Høiland-Jørgensen
2019-06-06 13:33 ` Jesper Dangaard Brouer [this message]
2019-06-06 13:49 ` Toke Høiland-Jørgensen
2019-06-06 18:20 ` [PATCH net-next v2 0/2] xdp: Allow lookup into devmaps before redirect David Miller
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=20190606153344.4871ffa2@carbon \
--to=brouer@redhat.com \
--cc=ast@kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
--cc=toke@redhat.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.