From: "Toke Høiland-Jørgensen" <toke@redhat.com>
To: David Ahern <dsahern@gmail.com>, David Ahern <dsahern@kernel.org>,
netdev@vger.kernel.org
Cc: davem@davemloft.net, kuba@kernel.org,
prashantbhole.linux@gmail.com, jasowang@redhat.com,
brouer@redhat.com, toshiaki.makita1@gmail.com,
daniel@iogearbox.net, john.fastabend@gmail.com, ast@kernel.org,
kafai@fb.com, songliubraving@fb.com, yhs@fb.com, andriin@fb.com,
David Ahern <dahern@digitalocean.com>
Subject: Re: [PATCH RFC-v5 bpf-next 02/12] net: Add BPF_XDP_EGRESS as a bpf_attach_type
Date: Fri, 17 Apr 2020 11:23:38 +0200 [thread overview]
Message-ID: <87a73alb39.fsf@toke.dk> (raw)
In-Reply-To: <0b9c1c4e-c6a3-48a1-7f0a-f7362e9a10a6@gmail.com>
David Ahern <dsahern@gmail.com> writes:
> On 4/16/20 8:01 AM, Toke Høiland-Jørgensen wrote:
>> David Ahern <dsahern@kernel.org> writes:
>>
>>> From: David Ahern <dahern@digitalocean.com>
>>>
>>> Add new bpf_attach_type, BPF_XDP_EGRESS, for BPF programs attached
>>> at the XDP layer, but the egress path.
>>>
>>> Since egress path will not have ingress_ifindex and rx_queue_index
>>> set, update xdp_is_valid_access to block access to these entries in
>>> the xdp context when a program is attached to egress path.
>>>
>>> Update dev_change_xdp_fd to verify expected_attach_type for a program
>>> is BPF_XDP_EGRESS if egress argument is set.
>>>
>>> The next patch adds support for the egress ifindex.
>>>
>>> Signed-off-by: Prashant Bhole <prashantbhole.linux@gmail.com>
>>> Signed-off-by: David Ahern <dahern@digitalocean.com>
>>> ---
>>> include/uapi/linux/bpf.h | 1 +
>>> net/core/dev.c | 6 ++++++
>>> net/core/filter.c | 8 ++++++++
>>> tools/include/uapi/linux/bpf.h | 1 +
>>> 4 files changed, 16 insertions(+)
>>>
>>> diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h
>>> index 2e29a671d67e..a9d384998e8b 100644
>>> --- a/include/uapi/linux/bpf.h
>>> +++ b/include/uapi/linux/bpf.h
>>> @@ -215,6 +215,7 @@ enum bpf_attach_type {
>>> BPF_TRACE_FEXIT,
>>> BPF_MODIFY_RETURN,
>>> BPF_LSM_MAC,
>>> + BPF_XDP_EGRESS,
>>> __MAX_BPF_ATTACH_TYPE
>>> };
>>>
>>> diff --git a/net/core/dev.c b/net/core/dev.c
>>> index 06e0872ecdae..e763b6cea8ff 100644
>>> --- a/net/core/dev.c
>>> +++ b/net/core/dev.c
>>> @@ -8731,6 +8731,12 @@ int dev_change_xdp_fd(struct net_device *dev, struct netlink_ext_ack *extack,
>>> if (IS_ERR(prog))
>>> return PTR_ERR(prog);
>>>
>>> + if (egress && prog->expected_attach_type != BPF_XDP_EGRESS) {
>>> + NL_SET_ERR_MSG(extack, "XDP program in Tx path must use BPF_XDP_EGRESS attach type");
>>> + bpf_prog_put(prog);
>>> + return -EINVAL;
>>> + }
>>> +
>>> if (!offload && bpf_prog_is_dev_bound(prog->aux)) {
>>> NL_SET_ERR_MSG(extack, "using device-bound program without HW_MODE flag is not supported");
>>> bpf_prog_put(prog);
>>> diff --git a/net/core/filter.c b/net/core/filter.c
>>> index 7628b947dbc3..c4e0e044722f 100644
>>> --- a/net/core/filter.c
>>> +++ b/net/core/filter.c
>>> @@ -6935,6 +6935,14 @@ static bool xdp_is_valid_access(int off, int size,
>>> const struct bpf_prog *prog,
>>> struct bpf_insn_access_aux *info)
>>> {
>>> + if (prog->expected_attach_type == BPF_XDP_EGRESS) {
>>> + switch (off) {
>>> + case offsetof(struct xdp_md, ingress_ifindex):
>>> + case offsetof(struct xdp_md, rx_queue_index):
>>> + return false;
>>> + }
>>> + }
>>> +
>>
>> How will this be handled for freplace programs - will they also
>> "inherit" the expected_attach_type of the programs they attach to?
>>
>
> not sure I understand your point. This is not the first program type to
> have an expected_attach_type; it should work the same way others do -
> e.g., cgroup program types.
When attaching an freplace prog, the verifier will update the verifier
ops it uses with those of the target XDP program (in
check_attach_btf_id()). This is what makes the freplace program get
verified as if it were itself an XDP program.
However the freplace() program itself cannot use expected_attach_type
(see check in bpf_tracing_prog_attach()). So I don't think this check
based on prog->expected_attach_type is not going to work for freplace()
programs?
-Toke
next prev parent reply other threads:[~2020-04-17 9:23 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-13 17:17 [PATCH RFC-v5 bpf-next 00/12] Add support for XDP in egress path David Ahern
2020-04-13 17:17 ` [PATCH RFC-v5 bpf-next 01/12] net: Add XDP setup and query commands for Tx programs David Ahern
2020-04-13 17:17 ` [PATCH RFC-v5 bpf-next 02/12] net: Add BPF_XDP_EGRESS as a bpf_attach_type David Ahern
2020-04-16 14:01 ` Toke Høiland-Jørgensen
2020-04-16 16:35 ` David Ahern
2020-04-17 9:23 ` Toke Høiland-Jørgensen [this message]
2020-04-13 17:17 ` [PATCH RFC-v5 bpf-next 03/12] xdp: Add xdp_txq_info to xdp_buff David Ahern
2020-04-13 17:17 ` [PATCH RFC-v5 bpf-next 04/12] net: Add IFLA_XDP_EGRESS for XDP programs in the egress path David Ahern
2020-04-13 17:17 ` [PATCH RFC-v5 bpf-next 05/12] net: core: rename netif_receive_generic_xdp to do_generic_xdp_core David Ahern
2020-04-16 14:00 ` Toke Høiland-Jørgensen
2020-04-13 17:17 ` [PATCH RFC-v5 bpf-next 06/12] net: core: Rename do_xdp_generic to do_xdp_generic_rx David Ahern
2020-04-13 17:17 ` [PATCH RFC-v5 bpf-next 07/12] dev: set egress XDP program David Ahern
2020-04-13 17:17 ` [PATCH RFC-v5 bpf-next 08/12] dev: Support xdp in the Tx path for packets as an skb David Ahern
2020-04-13 17:17 ` [PATCH RFC-v5 bpf-next 09/12] dev: Support xdp in the Tx path for xdp_frames David Ahern
2020-04-16 14:02 ` Toke Høiland-Jørgensen
2020-04-16 23:50 ` David Ahern
2020-04-17 9:25 ` Toke Høiland-Jørgensen
2020-04-17 20:06 ` David Ahern
2020-04-17 8:30 ` Jesper Dangaard Brouer
2020-04-17 21:29 ` David Ahern
2020-04-13 17:17 ` [PATCH RFC-v5 bpf-next 10/12] libbpf: Add egress XDP support David Ahern
2020-04-13 17:18 ` [PATCH RFC-v5 bpf-next 11/12] bpftool: Add support for XDP egress David Ahern
2020-04-13 17:18 ` [PATCH RFC-v5 bpf-next 12/12] samples/bpf: add XDP egress support to xdp1 David Ahern
2020-04-15 15:01 ` Alexei Starovoitov
2020-04-16 13:59 ` [PATCH RFC-v5 bpf-next 00/12] Add support for XDP in egress path Toke Høiland-Jørgensen
2020-04-16 23:55 ` David Ahern
2020-04-17 9:28 ` Toke Høiland-Jørgensen
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=87a73alb39.fsf@toke.dk \
--to=toke@redhat.com \
--cc=andriin@fb.com \
--cc=ast@kernel.org \
--cc=brouer@redhat.com \
--cc=dahern@digitalocean.com \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=dsahern@gmail.com \
--cc=dsahern@kernel.org \
--cc=jasowang@redhat.com \
--cc=john.fastabend@gmail.com \
--cc=kafai@fb.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=prashantbhole.linux@gmail.com \
--cc=songliubraving@fb.com \
--cc=toshiaki.makita1@gmail.com \
--cc=yhs@fb.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.