| #
f5ad4101 |
| 15-Apr-2026 |
Linus Torvalds <torvalds@linux-foundation.org> |
Merge tag 'bpf-next-7.1' of git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next
Pull bpf updates from Alexei Starovoitov:
- Welcome new BPF maintainers: Kumar Kartikeya Dwivedi, Eduard Z
Merge tag 'bpf-next-7.1' of git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next
Pull bpf updates from Alexei Starovoitov:
- Welcome new BPF maintainers: Kumar Kartikeya Dwivedi, Eduard Zingerman while Martin KaFai Lau reduced his load to Reviwer.
- Lots of fixes everywhere from many first time contributors. Thank you All.
- Diff stat is dominated by mechanical split of verifier.c into multiple components:
- backtrack.c: backtracking logic and jump history - states.c: state equivalence - cfg.c: control flow graph, postorder, strongly connected components - liveness.c: register and stack liveness - fixups.c: post-verification passes: instruction patching, dead code removal, bpf_loop inlining, finalize fastcall
8k line were moved. verifier.c still stands at 20k lines.
Further refactoring is planned for the next release.
- Replace dynamic stack liveness with static stack liveness based on data flow analysis.
This improved the verification time by 2x for some programs and equally reduced memory consumption. New logic is in liveness.c and supported by constant folding in const_fold.c (Eduard Zingerman, Alexei Starovoitov)
- Introduce BTF layout to ease addition of new BTF kinds (Alan Maguire)
- Use kmalloc_nolock() universally in BPF local storage (Amery Hung)
- Fix several bugs in linked registers delta tracking (Daniel Borkmann)
- Improve verifier support of arena pointers (Emil Tsalapatis)
- Improve verifier tracking of register bounds in min/max and tnum domains (Harishankar Vishwanathan, Paul Chaignon, Hao Sun)
- Further extend support for implicit arguments in the verifier (Ihor Solodrai)
- Add support for nop,nop5 instruction combo for USDT probes in libbpf (Jiri Olsa)
- Support merging multiple module BTFs (Josef Bacik)
- Extend applicability of bpf_kptr_xchg (Kaitao Cheng)
- Retire rcu_trace_implies_rcu_gp() (Kumar Kartikeya Dwivedi)
- Support variable offset context access for 'syscall' programs (Kumar Kartikeya Dwivedi)
- Migrate bpf_task_work and dynptr to kmalloc_nolock() (Mykyta Yatsenko)
- Fix UAF in in open-coded task_vma iterator (Puranjay Mohan)
* tag 'bpf-next-7.1' of git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next: (241 commits) selftests/bpf: cover short IPv4/IPv6 inputs with adjust_room bpf: reject short IPv4/IPv6 inputs in bpf_prog_test_run_skb selftests/bpf: Use memfd_create instead of shm_open in cgroup_iter_memcg selftests/bpf: Add test for cgroup storage OOB read bpf: Fix OOB in pcpu_init_value selftests/bpf: Fix reg_bounds to match new tnum-based refinement selftests/bpf: Add tests for non-arena/arena operations bpf: Allow instructions with arena source and non-arena dest registers bpftool: add missing fsession to the usage and docs of bpftool docs/bpf: add missing fsession attach type to docs bpf: add missing fsession to the verifier log bpf: Move BTF checking logic into check_btf.c bpf: Move backtracking logic to backtrack.c bpf: Move state equivalence logic to states.c bpf: Move check_cfg() into cfg.c bpf: Move compute_insn_live_regs() into liveness.c bpf: Move fixup/post-processing logic from verifier.c into fixups.c bpf: Simplify do_check_insn() bpf: Move checks for reserved fields out of the main pass bpf: Delete unused variable ...
show more ...
|
| #
61bc8460 |
| 21-Mar-2026 |
Alexei Starovoitov <ast@kernel.org> |
Merge branch 'libbpf-add-bpf_program__clone-for-individual-program-loading'
Mykyta Yatsenko says:
==================== libbpf: Add bpf_program__clone() for individual program loading
This series a
Merge branch 'libbpf-add-bpf_program__clone-for-individual-program-loading'
Mykyta Yatsenko says:
==================== libbpf: Add bpf_program__clone() for individual program loading
This series adds bpf_program__clone() to libbpf and converts veristat to use it, replacing the costly per-program object re-opening pattern.
veristat needs to load each BPF program in isolation to collect per-program verification statistics. Previously it achieved this by opening a fresh bpf_object for every program, disabling autoload on all but the target, and loading the whole object. For object files with many programs this meant repeating ELF parsing and BTF processing N times.
Patch 1 introduces bpf_program__clone(), which loads a single program from a prepared object into the kernel and returns an fd owned by the caller. It populates load parameters from the prepared object and lets callers override any field via bpf_prog_load_opts. Fields written by the prog_prepare_load_fn callback (expected_attach_type, attach_btf_id, attach_btf_obj_fd) are seeded from prog/obj defaults before the callback, then overridden with caller opts after, so explicit values always win.
Patch 2 converts veristat to prepare the object once and clone each program individually, eliminating redundant work.
Patch 3 adds a selftest verifying that caller-provided attach_btf_id overrides are respected by bpf_program__clone().
Performance Tested on selftests: 918 objects, ~4270 programs: - Wall time: 36.88s -> 23.18s (37% faster) - User time: 20.80s -> 16.07s (23% faster) - Kernel time: 12.07s -> 6.06s (50% faster)
Per-program loading also improves coverage: 83 programs that previously failed now succeed.
Known regression: - Program-containing maps (PROG_ARRAY, DEVMAP, CPUMAP) track owner program type. Programs with incompatible attributes loaded against a shared map will be rejected. This is expected kernel behavior.
Signed-off-by: Mykyta Yatsenko <yatsenko@meta.com> --- Changes in v5: - Fix overriding of the attach_btf_id, attach_btf_fd, etc: the override provided by the caller is applied after prog_prepare_load_fn(). - Added selftest to verify attach_btf_id override works as expected. - Link to v4: https://lore.kernel.org/all/20260316-veristat_prepare-v3-0-94e5691e0494@meta.com/
Changes in v4: - Replace OPTS_SET() with direct struct assignment for local bpf_prog_load_opts in bpf_program__clone() (libbpf.c) - Remove unnecessary pattr pointer indirection (libbpf.c) - Separate input and output fields in bpf_program__clone(): input fields (prog_flags, fd_array, etc.) are merged from caller opts before the callback; output fields (expected_attach_type, attach_btf_id, attach_btf_obj_fd) are initialized from prog/obj defaults for the callback, then overridden with caller opts after, so explicit caller values always win (libbpf.c) - Add selftest for attach_btf_id override - Link to v3: https://lore.kernel.org/r/20260206-veristat_prepare-a4a041873c53-v3@meta.com
Changes in v3: - Clone fd_array_cnt in bpf_object__clone() - In veristat do not fail if bpf_object__prepare() fails, continue per-program processing to produce per program output - Link to v2: https://lore.kernel.org/r/20260220-veristat_prepare-v2-0-15bff49022a7@meta.com
Changes in v2: - Removed map cloning entirely (libbpf.c) - Renamed bpf_prog_clone() -> bpf_program__clone() - Removed unnecessary obj NULL check (libbpf.c) - Fixed opts handling — no longer mutates caller's opts (libbpf.c) - Link to v1: https://lore.kernel.org/all/20260212-veristat_prepare-v1-0-c351023fb0db@meta.com/
--- ====================
Link: https://patch.msgid.link/20260317-veristat_prepare-v4-0-74193d4cc9d9@meta.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
show more ...
|
| #
ceebdeec |
| 17-Mar-2026 |
Mykyta Yatsenko <yatsenko@meta.com> |
selftests/bpf: Test bpf_program__clone() attach_btf_id override
Add a test that verifies bpf_program__clone() respects caller-provided attach_btf_id in bpf_prog_load_opts.
The BPF program has SEC("
selftests/bpf: Test bpf_program__clone() attach_btf_id override
Add a test that verifies bpf_program__clone() respects caller-provided attach_btf_id in bpf_prog_load_opts.
The BPF program has SEC("fentry/bpf_fentry_test1"). It is cloned twice from the same prepared object: first with no opts, verifying the callback resolves attach_btf_id from sec_name to bpf_fentry_test1; then with attach_btf_id overridden to bpf_fentry_test2, verifying the loaded program is actually attached to bpf_fentry_test2. Both results are checked via bpf_prog_get_info_by_fd().
Signed-off-by: Mykyta Yatsenko <yatsenko@meta.com> Reviewed-by: Emil Tsalapatis <emil@etsalapatis.com> Link: https://lore.kernel.org/r/20260317-veristat_prepare-v4-3-74193d4cc9d9@meta.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
show more ...
|