On Thu, Nov 7, 2019 at 10:43 PM Alexei Starovoitov <ast@xxxxxxxxxx> wrote: > > Add a test that attaches one FEXIT program to main sched_cls networking program > and two other FEXIT programs to subprograms. All three tracing programs > access return values and skb->len of networking program and subprograms. > > Signed-off-by: Alexei Starovoitov <ast@xxxxxxxxxx> > --- Acked-by: Andrii Nakryiko <andriin@xxxxxx> > .../selftests/bpf/prog_tests/fexit_bpf2bpf.c | 76 ++++++++++++++++ > .../selftests/bpf/progs/fexit_bpf2bpf.c | 91 +++++++++++++++++++ > 2 files changed, 167 insertions(+) > create mode 100644 tools/testing/selftests/bpf/prog_tests/fexit_bpf2bpf.c > create mode 100644 tools/testing/selftests/bpf/progs/fexit_bpf2bpf.c > [...] > +SEC("fexit/test_pkt_access_subprog2") > +int test_subprog2(struct args_subprog2 *ctx) > +{ > + struct sk_buff *skb = (void *)ctx->args[0]; > + __u64 ret; > + int len; > + > + bpf_probe_read(&len, sizeof(len), > + __builtin_preserve_access_index(&skb->len)); nit: we have bpf_core_read() for this, but I suspect you may have wanted __builtin spelled out explicitly > + > + ret = ctx->ret; > + /* bpf_prog_load() loads "test_pkt_access.o" with BPF_F_TEST_RND_HI32 > + * which randomizes upper 32 bits after BPF_ALU32 insns. > + * Hence after 'w0 <<= 1' upper bits of $rax are random. > + * That is expected and correct. Trim them. > + */ > + ret = (__u32) ret; > + if (len != 74 || ret != 148) > + return 0; > + test_result_subprog2 = 1; > + return 0; > +} > +char _license[] SEC("license") = "GPL"; > -- > 2.23.0 >