BPF List
 help / color / mirror / Atom feed
* [PATCH v2 bpf-next 0/4] Fix global subprog PTR_TO_CTX arg handling
@ 2024-02-12 23:32 Andrii Nakryiko
  2024-02-12 23:32 ` [PATCH v2 bpf-next 1/4] bpf: simplify btf_get_prog_ctx_type() into btf_is_prog_ctx_type() Andrii Nakryiko
                   ` (6 more replies)
  0 siblings, 7 replies; 14+ messages in thread
From: Andrii Nakryiko @ 2024-02-12 23:32 UTC (permalink / raw)
  To: bpf, ast, daniel, martin.lau; +Cc: andrii, kernel-team

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(-)

-- 
2.39.3


^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2024-02-14  2:50 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-12 23:32 [PATCH v2 bpf-next 0/4] Fix global subprog PTR_TO_CTX arg handling Andrii Nakryiko
2024-02-12 23:32 ` [PATCH v2 bpf-next 1/4] bpf: simplify btf_get_prog_ctx_type() into btf_is_prog_ctx_type() Andrii Nakryiko
2024-02-12 23:32 ` [PATCH v2 bpf-next 2/4] bpf: handle bpf_user_pt_regs_t typedef explicitly for PTR_TO_CTX global arg Andrii Nakryiko
2024-02-13 16:40   ` Eduard Zingerman
2024-02-13 17:02     ` Andrii Nakryiko
2024-02-13 17:08       ` Eduard Zingerman
2024-02-13 18:12         ` Andrii Nakryiko
2024-02-13 18:48           ` Eduard Zingerman
2024-02-13 18:59             ` Andrii Nakryiko
2024-02-12 23:32 ` [PATCH v2 bpf-next 3/4] bpf: don't infer PTR_TO_CTX for programs with unnamed context type Andrii Nakryiko
2024-02-12 23:32 ` [PATCH v2 bpf-next 4/4] selftests/bpf: add anonymous user struct as global subprog arg test Andrii Nakryiko
2024-02-13 12:51 ` [PATCH v2 bpf-next 0/4] Fix global subprog PTR_TO_CTX arg handling Jiri Olsa
2024-02-13 16:39 ` Eduard Zingerman
2024-02-14  2:50 ` patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox