On Thu, Aug 29, 2019 at 06:04:42AM +0000, Song Liu wrote: > > > > On Aug 28, 2019, at 10:12 PM, Alexei Starovoitov <ast@xxxxxxxxxx> wrote: > > > > [...] > > > diff --git a/tools/testing/selftests/bpf/test_verifier.c b/tools/testing/selftests/bpf/test_verifier.c > > index 44e2d640b088..91a7f25512ca 100644 > > --- a/tools/testing/selftests/bpf/test_verifier.c > > +++ b/tools/testing/selftests/bpf/test_verifier.c > > @@ -805,10 +805,20 @@ static void do_test_fixup(struct bpf_test *test, enum bpf_prog_type prog_type, > > } > > } > > > > +struct libcap { > > + struct __user_cap_header_struct hdr; > > + struct __user_cap_data_struct data[2]; > > +}; > > + > > I am confused by struct libcap. Why do we need it? because libcap is not compatible with new kernel. It needs to be recompiled with new capability.h Otherwise it limits max to CAP_AUDIT_READ Any value higher it will error during cap_get_flag. And will silently ignore it during cap_set_flag. Not a great library decision. Thankfully this struct above is exactly the kernel api. One doesn't really need libcap. It's imo easier to do without it.