On Fri, Feb 12, 2021 at 12:57 PM Dmitrii Banshchikov <me@xxxxxxxxxxxxx> wrote: > > test_global_func9 - check valid pointer's scenarios > test_global_func10 - check that a smaller type cannot be passed as a > larger one > test_global_func11 - check that CTX pointer cannot be passed > test_global_func12 - check access to a null pointer > test_global_func13 - check access to an arbitrary pointer value > test_global_func14 - check that an opaque pointer cannot be passed > test_global_func15 - check that a variable has an unknown value after > it was passed to a global function by pointer > test_global_func16 - check access to uninitialized stack memory > > test_global_func_args - check read and write operations through a pointer > > Signed-off-by: Dmitrii Banshchikov <me@xxxxxxxxxxxxx> > --- > .../bpf/prog_tests/global_func_args.c | 60 ++++++++ > .../bpf/prog_tests/test_global_funcs.c | 8 ++ > .../selftests/bpf/progs/test_global_func10.c | 29 ++++ > .../selftests/bpf/progs/test_global_func11.c | 19 +++ > .../selftests/bpf/progs/test_global_func12.c | 21 +++ > .../selftests/bpf/progs/test_global_func13.c | 24 ++++ > .../selftests/bpf/progs/test_global_func14.c | 21 +++ > .../selftests/bpf/progs/test_global_func15.c | 22 +++ > .../selftests/bpf/progs/test_global_func16.c | 22 +++ > .../selftests/bpf/progs/test_global_func9.c | 132 ++++++++++++++++++ > .../bpf/progs/test_global_func_args.c | 91 ++++++++++++ > 11 files changed, 449 insertions(+) > create mode 100644 tools/testing/selftests/bpf/prog_tests/global_func_args.c > create mode 100644 tools/testing/selftests/bpf/progs/test_global_func10.c > create mode 100644 tools/testing/selftests/bpf/progs/test_global_func11.c > create mode 100644 tools/testing/selftests/bpf/progs/test_global_func12.c > create mode 100644 tools/testing/selftests/bpf/progs/test_global_func13.c > create mode 100644 tools/testing/selftests/bpf/progs/test_global_func14.c > create mode 100644 tools/testing/selftests/bpf/progs/test_global_func15.c > create mode 100644 tools/testing/selftests/bpf/progs/test_global_func16.c > create mode 100644 tools/testing/selftests/bpf/progs/test_global_func9.c > create mode 100644 tools/testing/selftests/bpf/progs/test_global_func_args.c > [...] > diff --git a/tools/testing/selftests/bpf/progs/test_global_func11.c b/tools/testing/selftests/bpf/progs/test_global_func11.c > new file mode 100644 > index 000000000000..28488047c849 > --- /dev/null > +++ b/tools/testing/selftests/bpf/progs/test_global_func11.c > @@ -0,0 +1,19 @@ > +// SPDX-License-Identifier: GPL-2.0-only > +#include <stddef.h> > +#include <linux/bpf.h> > +#include <bpf/bpf_helpers.h> > + > +struct S { > + int x; > +}; > + > +__noinline int foo(const struct S *s) > +{ > + return s ? bpf_get_prandom_u32() < s->x : 0; > +} > + > +SEC("cgroup_skb/ingress") > +int test_cls(struct __sk_buff *skb) > +{ > + return foo(skb); This needs (void *) cast. It currently generates compilation warning: progs/test_global_func11.c:18:13: warning: incompatible pointer types passing 'struct __sk_buff *' to parameter of type 'const struct S *' [-Wincompatible-pointer-types] return foo(skb); ^~~ progs/test_global_func11.c:10:36: note: passing argument to parameter 's' here __noinline int foo(const struct S *s) ^ Please send a follow-up patch. > +} [...]