On Mon, 2024-02-12 at 15:32 -0800, Andrii Nakryiko wrote: > Fix confusing and incorrect inference of PTR_TO_CTX argument type in BPF > global subprogs. For some program types (iters, tracepoint, any program type > that doesn't have fixed named "canonical" context type) when user uses (in > a correct and valid way) a pointer argument to user-defined anonymous struct > type, verifier will incorrectly assume that it has to be PTR_TO_CTX argument. > While it should be just a PTR_TO_MEM argument with allowed size calculated > from user-provided (even if anonymous) struct. > > This did come up in practice and was very confusing to users, so let's prevent > this going forward. We had to do a slight refactoring of > btf_get_prog_ctx_type() to make it easy to support a special s390x KPROBE use > cases. See details in respective patches. > > v1->v2: > - special-case typedef bpf_user_pt_regs_t handling for KPROBE programs, > fixing s390x after changes in patch #2. > > Andrii Nakryiko (4): > bpf: simplify btf_get_prog_ctx_type() into btf_is_prog_ctx_type() > bpf: handle bpf_user_pt_regs_t typedef explicitly for PTR_TO_CTX > global arg > bpf: don't infer PTR_TO_CTX for programs with unnamed context type > selftests/bpf: add anonymous user struct as global subprog arg test > > include/linux/btf.h | 17 ++++--- > kernel/bpf/btf.c | 45 +++++++++++++------ > kernel/bpf/verifier.c | 2 +- > .../bpf/progs/test_global_func_ctx_args.c | 19 ++++++++ > .../bpf/progs/verifier_global_subprogs.c | 29 ++++++++++++ > 5 files changed, 88 insertions(+), 24 deletions(-) > I have a nit for patch #2 but that might be not important. Acked-by: Eduard Zingerman <eddyz87@xxxxxxxxx>