[PATCH bpf-next v4 00/13] Add arena argument support to kfuncs and struct_ops
Kumar Kartikeya Dwivedi <[email protected]>
| Newsgroups | org.kernel.vger.bpf |
|---|---|
| Message-ID | <[email protected]> |
This is a continuation of patches in [0], with mostly minor changes and reordering. The motivation is covered in that link. A major change is moving to two tags (__arena and __arena__nullable) and moving the changes to JIT to emit more optimized sequences. Please see commit logs for details. [0]: https://lore.kernel.org/bpf/[email protected] Changelog: ---------- v3 -> v4 v3: https://lore.kernel.org/bpf/[email protected] * Rename __arena_nullable to __arena__nullable and prioritize the composite suffix over __nullable during argument classification. (Sashiko, Eduard) * Resolve instructions before collecting subprograms and kfuncs so kfunc prototype validation can use associated arena state. * Move the arena kfunc and JIT-sequence test entry points into prog_tests/verifier.c. (Eduard) * Match the generated L0 target and call in nullable JIT assertions. (Eduard) * Route arena kfunc validation through the common argument-checking path. (Amery) * Reuse btf_func_model argument flags for struct_ops arena arguments instead of maintaining separate trampoline slot metadata. (Eduard) * Check the generic-trampoline arena argument invariant at link time and warn once on violations. (Eduard) * Reject tracing attachments to struct_ops programs with arena context arguments whose indirect trampolines convert the pointers. (Sashiko) v2 -> v3 v2: https://lore.kernel.org/bpf/[email protected] * Rebase onto current bpf-next to resolve conflicts. v1 -> v2 v1: https://lore.kernel.org/bpf/[email protected] * Fix documentation to only mention x86 for now. (Sashiko) * Move arg bitmap from insn_aux_data to kfunc descriptor. (Eduard) Kumar Kartikeya Dwivedi (4): bpf: Rename 'early' BTF checking as a preparation phase bpf: Split subprogram and kfunc collection bpf: Collect kfuncs after resolving program resources bpf: Reject tracing progs for struct_ops with arena args Tejun Heo (9): bpf: Support __arena and __arena__nullable kfunc argument suffixes bpf: Support __arena and __arena__nullable on struct_ops arguments bpf, x86: JIT __arena kfunc argument rebasing bpf, x86: Convert struct_ops arena arguments in the trampoline selftests/bpf: Add kfunc __arena and __arena__nullable argument tests selftests/bpf: Add JIT-sequence tests for __arena kfunc arguments selftests/bpf: Add struct_ops __arena and __arena__nullable argument tests bpf, x86: Fix stack-passed arguments for indirect trampolines selftests/bpf: Test stack-passed struct_ops arena arguments Documentation/bpf/kfuncs.rst | 39 +++ arch/x86/net/bpf_jit_comp.c | 122 +++++++- include/linux/bpf.h | 16 ++ include/linux/bpf_verifier.h | 4 +- include/linux/filter.h | 1 + kernel/bpf/bpf_struct_ops.c | 52 +++- kernel/bpf/btf.c | 28 +- kernel/bpf/check_btf.c | 14 +- kernel/bpf/core.c | 5 + kernel/bpf/trampoline.c | 37 +++ kernel/bpf/verifier.c | 141 ++++++++-- .../bpf/prog_tests/test_struct_ops_arena.c | 74 +++++ .../selftests/bpf/prog_tests/verifier.c | 11 + .../testing/selftests/bpf/progs/arena_kfunc.c | 260 ++++++++++++++++++ .../selftests/bpf/progs/arena_kfunc_jit.c | 98 +++++++ .../selftests/bpf/progs/struct_ops_arena.c | 115 ++++++++ .../bpf/progs/struct_ops_arena_fail.c | 20 ++ .../selftests/bpf/test_kmods/bpf_testmod.c | 95 +++++++ .../selftests/bpf/test_kmods/bpf_testmod.h | 6 + .../bpf/test_kmods/bpf_testmod_kfunc.h | 13 + 20 files changed, 1092 insertions(+), 59 deletions(-) create mode 100644 tools/testing/selftests/bpf/prog_tests/test_struct_ops_arena.c create mode 100644 tools/testing/selftests/bpf/progs/arena_kfunc.c create mode 100644 tools/testing/selftests/bpf/progs/arena_kfunc_jit.c create mode 100644 tools/testing/selftests/bpf/progs/struct_ops_arena.c create mode 100644 tools/testing/selftests/bpf/progs/struct_ops_arena_fail.c base-commit: 11c1e836710dcba03e50454a4eedfdbaf8d3050e -- 2.53.0