Re: [PATCH bpf-next 2/2] selftests/bpf: Add selftest for allow_ptr_leaks

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Aug 22, 2023 at 6:45 AM Alexei Starovoitov
<alexei.starovoitov@xxxxxxxxx> wrote:
>
> On Fri, Aug 18, 2023 at 1:39 AM Yafang Shao <laoar.shao@xxxxxxxxx> wrote:
> >
> > - Without prev commit
> >
> >   $ tools/testing/selftests/bpf/test_progs --name=tc_bpf
> >   #232/1   tc_bpf/tc_bpf_root:OK
> >   test_tc_bpf_non_root:PASS:set_cap_bpf_cap_net_admin 0 nsec
> >   test_tc_bpf_non_root:PASS:disable_cap_sys_admin 0 nsec
> >   0: R1=ctx(off=0,imm=0) R10=fp0
> >   ; if ((long)(iph + 1) > (long)skb->data_end)
> >   0: (61) r2 = *(u32 *)(r1 +80)         ; R1=ctx(off=0,imm=0) R2_w=pkt_end(off=0,imm=0)
> >   ; struct iphdr *iph = (void *)(long)skb->data + sizeof(struct ethhdr);
> >   1: (61) r1 = *(u32 *)(r1 +76)         ; R1_w=pkt(off=0,r=0,imm=0)
> >   ; if ((long)(iph + 1) > (long)skb->data_end)
> >   2: (07) r1 += 34                      ; R1_w=pkt(off=34,r=0,imm=0)
> >   3: (b4) w0 = 1                        ; R0_w=1
> >   4: (2d) if r1 > r2 goto pc+1
> >   R2 pointer comparison prohibited
> >   processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
> >   test_tc_bpf_non_root:FAIL:test_tc_bpf__open_and_load unexpected error: -13
> >   #233/2   tc_bpf_non_root:FAIL
> >
> > - With prev commit
> >
> >   $ tools/testing/selftests/bpf/test_progs --name=tc_bpf
> >   #232/1   tc_bpf/tc_bpf_root:OK
> >   #232/2   tc_bpf/tc_bpf_non_root:OK
> >   #232     tc_bpf:OK
> >   Summary: 1/2 PASSED, 0 SKIPPED, 0 FAILED
> >
> > Signed-off-by: Yafang Shao <laoar.shao@xxxxxxxxx>
> > ---
> >  tools/testing/selftests/bpf/prog_tests/tc_bpf.c | 36 ++++++++++++++++++++++++-
> >  tools/testing/selftests/bpf/progs/test_tc_bpf.c | 14 ++++++++++
> >  2 files changed, 49 insertions(+), 1 deletion(-)
> >
> > diff --git a/tools/testing/selftests/bpf/prog_tests/tc_bpf.c b/tools/testing/selftests/bpf/prog_tests/tc_bpf.c
> > index e873766..48b5553 100644
> > --- a/tools/testing/selftests/bpf/prog_tests/tc_bpf.c
> > +++ b/tools/testing/selftests/bpf/prog_tests/tc_bpf.c
> > @@ -3,6 +3,7 @@
> >  #include <test_progs.h>
> >  #include <linux/pkt_cls.h>
> >
> > +#include "cap_helpers.h"
> >  #include "test_tc_bpf.skel.h"
> >
> >  #define LO_IFINDEX 1
> > @@ -327,7 +328,7 @@ static int test_tc_bpf_api(struct bpf_tc_hook *hook, int fd)
> >         return 0;
> >  }
> >
> > -void test_tc_bpf(void)
> > +void tc_bpf_root(void)
> >  {
> >         DECLARE_LIBBPF_OPTS(bpf_tc_hook, hook, .ifindex = LO_IFINDEX,
> >                             .attach_point = BPF_TC_INGRESS);
> > @@ -393,3 +394,36 @@ void test_tc_bpf(void)
> >         }
> >         test_tc_bpf__destroy(skel);
> >  }
> > +
> > +void tc_bpf_non_root(void)
> > +{
> > +       struct test_tc_bpf *skel = NULL;
> > +       __u64 caps = 0;
> > +       int ret;
> > +
> > +       /* In case CAP_BPF and CAP_PERFMON is not set */
> > +       ret = cap_enable_effective(1ULL << CAP_BPF | 1ULL << CAP_NET_ADMIN, &caps);
> > +       if (!ASSERT_OK(ret, "set_cap_bpf_cap_net_admin"))
> > +               return;
> > +       ret = cap_disable_effective(1ULL << CAP_SYS_ADMIN | 1ULL << CAP_PERFMON, NULL);
> > +       if (!ASSERT_OK(ret, "disable_cap_sys_admin"))
> > +               goto restore_cap;
> > +
> > +       skel = test_tc_bpf__open_and_load();
> > +       if (!ASSERT_OK_PTR(skel, "test_tc_bpf__open_and_load"))
> > +               goto restore_cap;
> > +
> > +       test_tc_bpf__destroy(skel);
> > +
> > +restore_cap:
> > +       if (caps)
> > +               cap_enable_effective(caps, NULL);
> > +}
> > +
> > +void test_tc_bpf(void)
> > +{
> > +       if (test__start_subtest("tc_bpf_root"))
> > +               tc_bpf_root();
> > +       if (test__start_subtest("tc_bpf_non_root"))
> > +               tc_bpf_non_root();
> > +}
> > diff --git a/tools/testing/selftests/bpf/progs/test_tc_bpf.c b/tools/testing/selftests/bpf/progs/test_tc_bpf.c
> > index d28ca8d..3e0f218 100644
> > --- a/tools/testing/selftests/bpf/progs/test_tc_bpf.c
> > +++ b/tools/testing/selftests/bpf/progs/test_tc_bpf.c
> > @@ -1,5 +1,8 @@
> >  // SPDX-License-Identifier: GPL-2.0
> >
> > +#include <linux/pkt_cls.h>
> > +#include <linux/ip.h>
> > +#include <linux/if_ether.h>
>
> Due to above it fails to compile:
>
> In file included from progs/test_tc_bpf.c:4:
> In file included from /usr/include/linux/ip.h:21:
> In file included from /usr/include/asm/byteorder.h:5:
> In file included from /usr/include/linux/byteorder/little_endian.h:13:
> /usr/include/linux/swab.h:136:8: error: unknown type name '__always_inline'
>   136 | static __always_inline unsigned long __swab(const unsigned long y)
>       |        ^

I can't find the above error log in the BPF CI log.
The BPF CI log just shows that it fails the test_map on s390 without
logs. Not sure why.

__always_inline is defined in bpf_helpers.h, so I think below
additional change could fix it.

--- a/tools/testing/selftests/bpf/progs/test_tc_bpf.c
+++ b/tools/testing/selftests/bpf/progs/test_tc_bpf.c
@@ -1,10 +1,10 @@
 // SPDX-License-Identifier: GPL-2.0

+#include <linux/bpf.h>
+#include <bpf/bpf_helpers.h>
 #include <linux/pkt_cls.h>
 #include <linux/ip.h>
 #include <linux/if_ether.h>
-#include <linux/bpf.h>
-#include <bpf/bpf_helpers.h>


-- 
Regards
Yafang





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux