diff mbox series

[bpf] libbpf: fix missing section "sk_skb/skb_verdict"

Message ID 20211126204108.11530-1-xiyou.wangcong@gmail.com (mailing list archive)
State Changes Requested
Delegated to: BPF
Headers show
Series [bpf] libbpf: fix missing section "sk_skb/skb_verdict" | expand

Checks

Context Check Description
netdev/tree_selection success Clearly marked for bpf
netdev/fixes_present success Fixes tag present in non-next series
netdev/subject_prefix success Link
netdev/cover_letter success Single patches do not need cover letters
netdev/patch_count success Link
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 0 this patch: 0
netdev/cc_maintainers fail 1 blamed authors not CCed: ast@kernel.org; 6 maintainers not CCed: kafai@fb.com songliubraving@fb.com kpsingh@kernel.org yhs@fb.com ast@kernel.org andrii@kernel.org
netdev/build_clang success Errors and warnings before: 0 this patch: 0
netdev/module_param success Was 0 now: 0
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/verify_fixes success Fixes tag looks correct
netdev/build_allmodconfig_warn success Errors and warnings before: 0 this patch: 0
netdev/checkpatch warning WARNING: line length of 105 exceeds 80 columns
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0
bpf/vmtest-bpf-PR fail PR summary
bpf/vmtest-bpf fail VM_Test

Commit Message

Cong Wang Nov. 26, 2021, 8:41 p.m. UTC
From: Cong Wang <cong.wang@bytedance.com>

When BPF_SK_SKB_VERDICT was introduced, I forgot to add
a section mapping for it in libbpf.

Fixes: a7ba4558e69a ("sock_map: Introduce BPF_SK_SKB_VERDICT")
Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: John Fastabend <john.fastabend@gmail.com>
Cc: Jakub Sitnicki <jakub@cloudflare.com>
Signed-off-by: Cong Wang <cong.wang@bytedance.com>
---
 tools/lib/bpf/libbpf.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Song Liu Nov. 27, 2021, 12:20 a.m. UTC | #1
On Fri, Nov 26, 2021 at 12:45 PM Cong Wang <xiyou.wangcong@gmail.com> wrote:
>
> From: Cong Wang <cong.wang@bytedance.com>
>
> When BPF_SK_SKB_VERDICT was introduced, I forgot to add
> a section mapping for it in libbpf.
>
> Fixes: a7ba4558e69a ("sock_map: Introduce BPF_SK_SKB_VERDICT")
> Cc: Daniel Borkmann <daniel@iogearbox.net>
> Cc: John Fastabend <john.fastabend@gmail.com>
> Cc: Jakub Sitnicki <jakub@cloudflare.com>
> Signed-off-by: Cong Wang <cong.wang@bytedance.com>

The patch looks good to me. But seems the selftests are OK without this. So,
do we really need this?

Thanks,
Song
Cong Wang Nov. 29, 2021, 8:50 p.m. UTC | #2
On Fri, Nov 26, 2021 at 04:20:34PM -0800, Song Liu wrote:
> On Fri, Nov 26, 2021 at 12:45 PM Cong Wang <xiyou.wangcong@gmail.com> wrote:
> >
> > From: Cong Wang <cong.wang@bytedance.com>
> >
> > When BPF_SK_SKB_VERDICT was introduced, I forgot to add
> > a section mapping for it in libbpf.
> >
> > Fixes: a7ba4558e69a ("sock_map: Introduce BPF_SK_SKB_VERDICT")
> > Cc: Daniel Borkmann <daniel@iogearbox.net>
> > Cc: John Fastabend <john.fastabend@gmail.com>
> > Cc: Jakub Sitnicki <jakub@cloudflare.com>
> > Signed-off-by: Cong Wang <cong.wang@bytedance.com>
> 
> The patch looks good to me. But seems the selftests are OK without this. So,
> do we really need this?
> 

Not sure if I understand this question.

At least BPF_SK_SKB_STREAM_PARSER and BPF_SK_SKB_STREAM_VERDICT are already
there, so either we should remove all of them or add BPF_SK_SKB_VERDICT for
completeness.

Or are you suggesting we should change it back in selftests too? Note, it was
changed by Andrii in commit 15669e1dcd75fe6d51e495f8479222b5884665b6:

-SEC("sk_skb/skb_verdict")
+SEC("sk_skb")

Thanks.
Song Liu Nov. 30, 2021, 11:32 p.m. UTC | #3
On Mon, Nov 29, 2021 at 12:51 PM Cong Wang <xiyou.wangcong@gmail.com> wrote:
>
> On Fri, Nov 26, 2021 at 04:20:34PM -0800, Song Liu wrote:
> > On Fri, Nov 26, 2021 at 12:45 PM Cong Wang <xiyou.wangcong@gmail.com> wrote:
> > >
> > > From: Cong Wang <cong.wang@bytedance.com>
> > >
> > > When BPF_SK_SKB_VERDICT was introduced, I forgot to add
> > > a section mapping for it in libbpf.
> > >
> > > Fixes: a7ba4558e69a ("sock_map: Introduce BPF_SK_SKB_VERDICT")
> > > Cc: Daniel Borkmann <daniel@iogearbox.net>
> > > Cc: John Fastabend <john.fastabend@gmail.com>
> > > Cc: Jakub Sitnicki <jakub@cloudflare.com>
> > > Signed-off-by: Cong Wang <cong.wang@bytedance.com>
> >
> > The patch looks good to me. But seems the selftests are OK without this. So,
> > do we really need this?
> >
>
> Not sure if I understand this question.
>
> At least BPF_SK_SKB_STREAM_PARSER and BPF_SK_SKB_STREAM_VERDICT are already
> there, so either we should remove all of them or add BPF_SK_SKB_VERDICT for
> completeness.
>
> Or are you suggesting we should change it back in selftests too? Note, it was
> changed by Andrii in commit 15669e1dcd75fe6d51e495f8479222b5884665b6:
>
> -SEC("sk_skb/skb_verdict")
> +SEC("sk_skb")

Yes, I noticed that Andrii made the change, and it seems to work
as-is. Therefore,
I had the question "do we really need it".

If we do need to differentiate skb_verdict from just sk_skb, could you
please add a
case selftest for skb_verdict?

Also, maybe we can name it as "sk_skb/verdict" to avoid duplication?

Thanks,
Song
Cong Wang Dec. 1, 2021, 4:19 a.m. UTC | #4
On Tue, Nov 30, 2021 at 3:33 PM Song Liu <song@kernel.org> wrote:
>
> On Mon, Nov 29, 2021 at 12:51 PM Cong Wang <xiyou.wangcong@gmail.com> wrote:
> >
> > On Fri, Nov 26, 2021 at 04:20:34PM -0800, Song Liu wrote:
> > > On Fri, Nov 26, 2021 at 12:45 PM Cong Wang <xiyou.wangcong@gmail.com> wrote:
> > > >
> > > > From: Cong Wang <cong.wang@bytedance.com>
> > > >
> > > > When BPF_SK_SKB_VERDICT was introduced, I forgot to add
> > > > a section mapping for it in libbpf.
> > > >
> > > > Fixes: a7ba4558e69a ("sock_map: Introduce BPF_SK_SKB_VERDICT")
> > > > Cc: Daniel Borkmann <daniel@iogearbox.net>
> > > > Cc: John Fastabend <john.fastabend@gmail.com>
> > > > Cc: Jakub Sitnicki <jakub@cloudflare.com>
> > > > Signed-off-by: Cong Wang <cong.wang@bytedance.com>
> > >
> > > The patch looks good to me. But seems the selftests are OK without this. So,
> > > do we really need this?
> > >
> >
> > Not sure if I understand this question.
> >
> > At least BPF_SK_SKB_STREAM_PARSER and BPF_SK_SKB_STREAM_VERDICT are already
> > there, so either we should remove all of them or add BPF_SK_SKB_VERDICT for
> > completeness.
> >
> > Or are you suggesting we should change it back in selftests too? Note, it was
> > changed by Andrii in commit 15669e1dcd75fe6d51e495f8479222b5884665b6:
> >
> > -SEC("sk_skb/skb_verdict")
> > +SEC("sk_skb")
>
> Yes, I noticed that Andrii made the change, and it seems to work
> as-is. Therefore,
> I had the question "do we really need it".

Same question from me: why still keep sk_skb/stream_parser and
sk_skb/stream_verdict? ;) I don't see any reason these two are more
special than sk_skb/skb_verdict, therefore we should either keep all
of them or remove all of them.

>
> If we do need to differentiate skb_verdict from just sk_skb, could you

Are you sure sk_skb is a real attach type?? To me, it is an umbrella to
catch all of them:

SEC_DEF("sk_skb",               SK_SKB, 0, SEC_NONE | SEC_SLOPPY_PFX),

whose expected_attach_type is 0. The reason why it works is
probably because we don't check BPF_PROG_TYPE_SK_SKB in
bpf_prog_load_check_attach().

> please add a
> case selftest for skb_verdict?

Ah, sure, I didn't know we have sec_name_test.

>
> Also, maybe we can name it as "sk_skb/verdict" to avoid duplication?

At least we used to call it sk_skb/skb_verdict before commit 15669e1dcd.

Thanks.
Andrii Nakryiko Dec. 1, 2021, 4:33 a.m. UTC | #5
On Tue, Nov 30, 2021 at 8:19 PM Cong Wang <xiyou.wangcong@gmail.com> wrote:
>
> On Tue, Nov 30, 2021 at 3:33 PM Song Liu <song@kernel.org> wrote:
> >
> > On Mon, Nov 29, 2021 at 12:51 PM Cong Wang <xiyou.wangcong@gmail.com> wrote:
> > >
> > > On Fri, Nov 26, 2021 at 04:20:34PM -0800, Song Liu wrote:
> > > > On Fri, Nov 26, 2021 at 12:45 PM Cong Wang <xiyou.wangcong@gmail.com> wrote:
> > > > >
> > > > > From: Cong Wang <cong.wang@bytedance.com>
> > > > >
> > > > > When BPF_SK_SKB_VERDICT was introduced, I forgot to add
> > > > > a section mapping for it in libbpf.
> > > > >
> > > > > Fixes: a7ba4558e69a ("sock_map: Introduce BPF_SK_SKB_VERDICT")
> > > > > Cc: Daniel Borkmann <daniel@iogearbox.net>
> > > > > Cc: John Fastabend <john.fastabend@gmail.com>
> > > > > Cc: Jakub Sitnicki <jakub@cloudflare.com>
> > > > > Signed-off-by: Cong Wang <cong.wang@bytedance.com>
> > > >
> > > > The patch looks good to me. But seems the selftests are OK without this. So,
> > > > do we really need this?
> > > >
> > >
> > > Not sure if I understand this question.
> > >
> > > At least BPF_SK_SKB_STREAM_PARSER and BPF_SK_SKB_STREAM_VERDICT are already
> > > there, so either we should remove all of them or add BPF_SK_SKB_VERDICT for
> > > completeness.
> > >
> > > Or are you suggesting we should change it back in selftests too? Note, it was
> > > changed by Andrii in commit 15669e1dcd75fe6d51e495f8479222b5884665b6:
> > >
> > > -SEC("sk_skb/skb_verdict")
> > > +SEC("sk_skb")
> >
> > Yes, I noticed that Andrii made the change, and it seems to work
> > as-is. Therefore,
> > I had the question "do we really need it".
>
> Same question from me: why still keep sk_skb/stream_parser and
> sk_skb/stream_verdict? ;) I don't see any reason these two are more
> special than sk_skb/skb_verdict, therefore we should either keep all
> of them or remove all of them.
>

"sk_skb/skb_verdict" was treated by libbpf *exactly* the same way as
"sk_skb". Which means the attach type was set to BPF_PROG_TYPE_SK_SKB
and expected_attach_type was 0 (not BPF_SK_SKB_VERDICT!). So that
program is definitely not a BPF_SK_SKB_VERDICT, libbpf pre-1.0 just
has a sloppy prefix matching logic.

So Song's point is valid, we currently don't have selftests that tests
BPF_SK_SKB_VERDICT expected attach type, so it would be good to add
it. Or make sure that existing test that was supposed to test it is
actually testing it.

> >
> > If we do need to differentiate skb_verdict from just sk_skb, could you
>
> Are you sure sk_skb is a real attach type?? To me, it is an umbrella to
> catch all of them:
>
> SEC_DEF("sk_skb",               SK_SKB, 0, SEC_NONE | SEC_SLOPPY_PFX),
>
> whose expected_attach_type is 0. The reason why it works is
> probably because we don't check BPF_PROG_TYPE_SK_SKB in
> bpf_prog_load_check_attach().

We don't check expected_attach_type in prog_load, but
sock_map_prog_update in net/core/sock_map.c is checking expected
attach type and should return -EOPNOTSUPP. But given that no test is
failing our tests don't even try to attach anything, I assume. Which
makes them not so great at actually testing anything. Please see if
you can improve that.

>
> > please add a
> > case selftest for skb_verdict?
>
> Ah, sure, I didn't know we have sec_name_test.
>
> >
> > Also, maybe we can name it as "sk_skb/verdict" to avoid duplication?
>
> At least we used to call it sk_skb/skb_verdict before commit 15669e1dcd.

As I mentioned above, it could have been called "sk_skb!dontcare" and
that would still work (and still does if strict mode is not enabled
for libbpf). For consistency with UAPI expected_attach_type enum it
should be called "sk_skb/verdict" because BPF_SK_SKB_VERDICT vs
BPF_SK_SKB_STREAM_VERDICT vs BPF_SK_SKB_STREAM_PARSER.

>
> Thanks.
Cong Wang Dec. 1, 2021, 5:03 a.m. UTC | #6
On Tue, Nov 30, 2021 at 8:33 PM Andrii Nakryiko
<andrii.nakryiko@gmail.com> wrote:
>
> On Tue, Nov 30, 2021 at 8:19 PM Cong Wang <xiyou.wangcong@gmail.com> wrote:
> >
> > On Tue, Nov 30, 2021 at 3:33 PM Song Liu <song@kernel.org> wrote:
> > >
> > > On Mon, Nov 29, 2021 at 12:51 PM Cong Wang <xiyou.wangcong@gmail.com> wrote:
> > > >
> > > > On Fri, Nov 26, 2021 at 04:20:34PM -0800, Song Liu wrote:
> > > > > On Fri, Nov 26, 2021 at 12:45 PM Cong Wang <xiyou.wangcong@gmail.com> wrote:
> > > > > >
> > > > > > From: Cong Wang <cong.wang@bytedance.com>
> > > > > >
> > > > > > When BPF_SK_SKB_VERDICT was introduced, I forgot to add
> > > > > > a section mapping for it in libbpf.
> > > > > >
> > > > > > Fixes: a7ba4558e69a ("sock_map: Introduce BPF_SK_SKB_VERDICT")
> > > > > > Cc: Daniel Borkmann <daniel@iogearbox.net>
> > > > > > Cc: John Fastabend <john.fastabend@gmail.com>
> > > > > > Cc: Jakub Sitnicki <jakub@cloudflare.com>
> > > > > > Signed-off-by: Cong Wang <cong.wang@bytedance.com>
> > > > >
> > > > > The patch looks good to me. But seems the selftests are OK without this. So,
> > > > > do we really need this?
> > > > >
> > > >
> > > > Not sure if I understand this question.
> > > >
> > > > At least BPF_SK_SKB_STREAM_PARSER and BPF_SK_SKB_STREAM_VERDICT are already
> > > > there, so either we should remove all of them or add BPF_SK_SKB_VERDICT for
> > > > completeness.
> > > >
> > > > Or are you suggesting we should change it back in selftests too? Note, it was
> > > > changed by Andrii in commit 15669e1dcd75fe6d51e495f8479222b5884665b6:
> > > >
> > > > -SEC("sk_skb/skb_verdict")
> > > > +SEC("sk_skb")
> > >
> > > Yes, I noticed that Andrii made the change, and it seems to work
> > > as-is. Therefore,
> > > I had the question "do we really need it".
> >
> > Same question from me: why still keep sk_skb/stream_parser and
> > sk_skb/stream_verdict? ;) I don't see any reason these two are more
> > special than sk_skb/skb_verdict, therefore we should either keep all
> > of them or remove all of them.
> >
>
> "sk_skb/skb_verdict" was treated by libbpf *exactly* the same way as
> "sk_skb". Which means the attach type was set to BPF_PROG_TYPE_SK_SKB
> and expected_attach_type was 0 (not BPF_SK_SKB_VERDICT!). So that
> program is definitely not a BPF_SK_SKB_VERDICT, libbpf pre-1.0 just
> has a sloppy prefix matching logic.

This is exactly what I meant by "umbrella". ;)

>
> So Song's point is valid, we currently don't have selftests that tests
> BPF_SK_SKB_VERDICT expected attach type, so it would be good to add
> it. Or make sure that existing test that was supposed to test it is
> actually testing it.

Sure, I just noticed we have section name tests a few minutes ago. Will add
it in V2.

>
> > >
> > > If we do need to differentiate skb_verdict from just sk_skb, could you
> >
> > Are you sure sk_skb is a real attach type?? To me, it is an umbrella to
> > catch all of them:
> >
> > SEC_DEF("sk_skb",               SK_SKB, 0, SEC_NONE | SEC_SLOPPY_PFX),
> >
> > whose expected_attach_type is 0. The reason why it works is
> > probably because we don't check BPF_PROG_TYPE_SK_SKB in
> > bpf_prog_load_check_attach().
>
> We don't check expected_attach_type in prog_load, but

I see many checks in bpf_prog_load_check_attach(), for instance:

2084         switch (prog_type) {
2085         case BPF_PROG_TYPE_CGROUP_SOCK:
2086                 switch (expected_attach_type) {
2087                 case BPF_CGROUP_INET_SOCK_CREATE:
2088                 case BPF_CGROUP_INET_SOCK_RELEASE:
2089                 case BPF_CGROUP_INET4_POST_BIND:
2090                 case BPF_CGROUP_INET6_POST_BIND:
2091                         return 0;
2092                 default:
2093                         return -EINVAL;
2094                 }


> sock_map_prog_update in net/core/sock_map.c is checking expected
> attach type and should return -EOPNOTSUPP. But given that no test is
> failing our tests don't even try to attach anything, I assume. Which
> makes them not so great at actually testing anything. Please see if
> you can improve that.

sock_map_prog_update() checks for attach_type, not
expected_attach_type.

>
> >
> > > please add a
> > > case selftest for skb_verdict?
> >
> > Ah, sure, I didn't know we have sec_name_test.
> >
> > >
> > > Also, maybe we can name it as "sk_skb/verdict" to avoid duplication?
> >
> > At least we used to call it sk_skb/skb_verdict before commit 15669e1dcd.
>
> As I mentioned above, it could have been called "sk_skb!dontcare" and

So why commit c6f6851b28ae26000352598f01968b3ff7dcf58 if your point
here is we don't need any name? ;)

> that would still work (and still does if strict mode is not enabled
> for libbpf). For consistency with UAPI expected_attach_type enum it
> should be called "sk_skb/verdict" because BPF_SK_SKB_VERDICT vs
> BPF_SK_SKB_STREAM_VERDICT vs BPF_SK_SKB_STREAM_PARSER.

To me, "verdict" is too broad, it could refer "stream_verdict" or "skb_verdict".
And let me quote commit c6f6851b28ae26000352598f01968b3ff7dcf588:

    "stream_parser" and "stream_verdict" are used instead of simple "parser"
    and "verdict" just to avoid possible confusion in a place where attach
    type is used alone (e.g. in bpftool's show sub-commands) since there is
    another attach point that can be named as "verdict": BPF_SK_MSG_VERDICT.

Thanks.
Andrii Nakryiko Dec. 1, 2021, 5:38 a.m. UTC | #7
On Tue, Nov 30, 2021 at 9:03 PM Cong Wang <xiyou.wangcong@gmail.com> wrote:
>
> On Tue, Nov 30, 2021 at 8:33 PM Andrii Nakryiko
> <andrii.nakryiko@gmail.com> wrote:
> >
> > On Tue, Nov 30, 2021 at 8:19 PM Cong Wang <xiyou.wangcong@gmail.com> wrote:
> > >
> > > On Tue, Nov 30, 2021 at 3:33 PM Song Liu <song@kernel.org> wrote:
> > > >
> > > > On Mon, Nov 29, 2021 at 12:51 PM Cong Wang <xiyou.wangcong@gmail.com> wrote:
> > > > >
> > > > > On Fri, Nov 26, 2021 at 04:20:34PM -0800, Song Liu wrote:
> > > > > > On Fri, Nov 26, 2021 at 12:45 PM Cong Wang <xiyou.wangcong@gmail.com> wrote:
> > > > > > >
> > > > > > > From: Cong Wang <cong.wang@bytedance.com>
> > > > > > >
> > > > > > > When BPF_SK_SKB_VERDICT was introduced, I forgot to add
> > > > > > > a section mapping for it in libbpf.
> > > > > > >
> > > > > > > Fixes: a7ba4558e69a ("sock_map: Introduce BPF_SK_SKB_VERDICT")
> > > > > > > Cc: Daniel Borkmann <daniel@iogearbox.net>
> > > > > > > Cc: John Fastabend <john.fastabend@gmail.com>
> > > > > > > Cc: Jakub Sitnicki <jakub@cloudflare.com>
> > > > > > > Signed-off-by: Cong Wang <cong.wang@bytedance.com>
> > > > > >
> > > > > > The patch looks good to me. But seems the selftests are OK without this. So,
> > > > > > do we really need this?
> > > > > >
> > > > >
> > > > > Not sure if I understand this question.
> > > > >
> > > > > At least BPF_SK_SKB_STREAM_PARSER and BPF_SK_SKB_STREAM_VERDICT are already
> > > > > there, so either we should remove all of them or add BPF_SK_SKB_VERDICT for
> > > > > completeness.
> > > > >
> > > > > Or are you suggesting we should change it back in selftests too? Note, it was
> > > > > changed by Andrii in commit 15669e1dcd75fe6d51e495f8479222b5884665b6:
> > > > >
> > > > > -SEC("sk_skb/skb_verdict")
> > > > > +SEC("sk_skb")
> > > >
> > > > Yes, I noticed that Andrii made the change, and it seems to work
> > > > as-is. Therefore,
> > > > I had the question "do we really need it".
> > >
> > > Same question from me: why still keep sk_skb/stream_parser and
> > > sk_skb/stream_verdict? ;) I don't see any reason these two are more
> > > special than sk_skb/skb_verdict, therefore we should either keep all
> > > of them or remove all of them.
> > >
> >
> > "sk_skb/skb_verdict" was treated by libbpf *exactly* the same way as
> > "sk_skb". Which means the attach type was set to BPF_PROG_TYPE_SK_SKB
> > and expected_attach_type was 0 (not BPF_SK_SKB_VERDICT!). So that
> > program is definitely not a BPF_SK_SKB_VERDICT, libbpf pre-1.0 just
> > has a sloppy prefix matching logic.
>
> This is exactly what I meant by "umbrella". ;)

You were asking why keep sk_skb/stream_verdict and
sk_skb/stream_parser and how it's different from sk_skb/skb_verdict.
The first two set expected_attach_type, the latter doesn't. Kernel
currently doesn't enforce extected_attach_type for SK_SKB prog type,
but that might change in the future.

>
> >
> > So Song's point is valid, we currently don't have selftests that tests
> > BPF_SK_SKB_VERDICT expected attach type, so it would be good to add
> > it. Or make sure that existing test that was supposed to test it is
> > actually testing it.
>
> Sure, I just noticed we have section name tests a few minutes ago. Will add
> it in V2.
>
> >
> > > >
> > > > If we do need to differentiate skb_verdict from just sk_skb, could you
> > >
> > > Are you sure sk_skb is a real attach type?? To me, it is an umbrella to
> > > catch all of them:
> > >
> > > SEC_DEF("sk_skb",               SK_SKB, 0, SEC_NONE | SEC_SLOPPY_PFX),
> > >
> > > whose expected_attach_type is 0. The reason why it works is
> > > probably because we don't check BPF_PROG_TYPE_SK_SKB in
> > > bpf_prog_load_check_attach().
> >
> > We don't check expected_attach_type in prog_load, but
>
> I see many checks in bpf_prog_load_check_attach(), for instance:
>
> 2084         switch (prog_type) {
> 2085         case BPF_PROG_TYPE_CGROUP_SOCK:
> 2086                 switch (expected_attach_type) {
> 2087                 case BPF_CGROUP_INET_SOCK_CREATE:
> 2088                 case BPF_CGROUP_INET_SOCK_RELEASE:
> 2089                 case BPF_CGROUP_INET4_POST_BIND:
> 2090                 case BPF_CGROUP_INET6_POST_BIND:
> 2091                         return 0;
> 2092                 default:
> 2093                         return -EINVAL;
> 2094                 }

I meant specifically for BPF_PROG_TYPE_SK_SKB, for which kernel
doesn't check or enforce expected_attach_type, as far as I can see
from the code.

>
>
> > sock_map_prog_update in net/core/sock_map.c is checking expected
> > attach type and should return -EOPNOTSUPP. But given that no test is
> > failing our tests don't even try to attach anything, I assume. Which
> > makes them not so great at actually testing anything. Please see if
> > you can improve that.
>
> sock_map_prog_update() checks for attach_type, not
> expected_attach_type.

Right, but shouldn't it make sure that attach_type ==
expected_attach_type? Otherwise what's even the point of
expected_attach_type?

>
> >
> > >
> > > > please add a
> > > > case selftest for skb_verdict?
> > >
> > > Ah, sure, I didn't know we have sec_name_test.
> > >
> > > >
> > > > Also, maybe we can name it as "sk_skb/verdict" to avoid duplication?
> > >
> > > At least we used to call it sk_skb/skb_verdict before commit 15669e1dcd.
> >
> > As I mentioned above, it could have been called "sk_skb!dontcare" and
>
> So why commit c6f6851b28ae26000352598f01968b3ff7dcf58 if your point
> here is we don't need any name? ;)

If kernel doesn't and *shoulnd't* care about expected_attach_type,
then maybe there is no point in supporting those names. I'm not
familiar with SK_SKB prog type, so I can't really answer. Given what
we do with CGROUP prog types and their expected attach types, I'd say
that probably the right thing is to enforce that in the kernel. But
again, opinions of others are welcome.

>
> > that would still work (and still does if strict mode is not enabled
> > for libbpf). For consistency with UAPI expected_attach_type enum it
> > should be called "sk_skb/verdict" because BPF_SK_SKB_VERDICT vs
> > BPF_SK_SKB_STREAM_VERDICT vs BPF_SK_SKB_STREAM_PARSER.
>
> To me, "verdict" is too broad, it could refer "stream_verdict" or "skb_verdict".

It's not "verdict" in isolation, it's "sk_skb/verdict". You yourself
added BPF_SK_SKB_VERDICT in a7ba4558e69a ("sock_map: Introduce
BPF_SK_SKB_VERDICT"), so I suppose that wasn't too broad at that time.
Now it's part of kernel UAPI, and consistency takes priority.

> And let me quote commit c6f6851b28ae26000352598f01968b3ff7dcf588:
>
>     "stream_parser" and "stream_verdict" are used instead of simple "parser"
>     and "verdict" just to avoid possible confusion in a place where attach
>     type is used alone (e.g. in bpftool's show sub-commands) since there is
>     another attach point that can be named as "verdict": BPF_SK_MSG_VERDICT.
>
> Thanks.
diff mbox series

Patch

diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
index 7c74342bb668..92fbebb12591 100644
--- a/tools/lib/bpf/libbpf.c
+++ b/tools/lib/bpf/libbpf.c
@@ -8346,6 +8346,7 @@  static const struct bpf_sec_def section_defs[] = {
 	SEC_DEF("sockops",		SOCK_OPS, BPF_CGROUP_SOCK_OPS, SEC_ATTACHABLE_OPT | SEC_SLOPPY_PFX),
 	SEC_DEF("sk_skb/stream_parser",	SK_SKB, BPF_SK_SKB_STREAM_PARSER, SEC_ATTACHABLE_OPT | SEC_SLOPPY_PFX),
 	SEC_DEF("sk_skb/stream_verdict",SK_SKB, BPF_SK_SKB_STREAM_VERDICT, SEC_ATTACHABLE_OPT | SEC_SLOPPY_PFX),
+	SEC_DEF("sk_skb/skb_verdict",	SK_SKB, BPF_SK_SKB_VERDICT, SEC_ATTACHABLE_OPT | SEC_SLOPPY_PFX),
 	SEC_DEF("sk_skb",		SK_SKB, 0, SEC_NONE | SEC_SLOPPY_PFX),
 	SEC_DEF("sk_msg",		SK_MSG, BPF_SK_MSG_VERDICT, SEC_ATTACHABLE_OPT | SEC_SLOPPY_PFX),
 	SEC_DEF("lirc_mode2",		LIRC_MODE2, BPF_LIRC_MODE2, SEC_ATTACHABLE_OPT | SEC_SLOPPY_PFX),