On Tue, Sep 14, 2021 at 10:09 PM Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> wrote: > > This set enables kernel module function calls, and also modifies verifier logic > to permit invalid kernel function calls as long as they are pruned as part of > dead code elimination. This is done to provide better runtime portability for > BPF objects, which can conditionally disable parts of code that are pruned later > by the verifier (e.g. const volatile vars, kconfig options). libbpf > modifications are made along with kernel changes to support module function > calls. The set includes gen_loader support for emitting kfunc relocations. > > It also converts TCP congestion control objects to use the module kfunc support > instead of relying on IS_BUILTIN ifdef. > > Changelog: > ---------- > v2 -> v3: > v2: https://lore.kernel.org/bpf/20210914123750.460750-1-memxor@xxxxxxxxx > > * Fix issues pointed out by Kernel Test Robot > * Fix find_kfunc_desc to also take offset into consideration when comparing See [0]: [ 444.075332] mod kfunc i=42 [ 444.075383] mod kfunc i=42 [ 444.075522] mod kfunc i=42 [ 444.075578] mod kfunc i=42 [ 444.075631] mod kfunc i=42 [ 444.075683] mod kfunc i=42 [ 444.075735] mod kfunc i=42 [ 444.0 This step has been truncated due to its large size. Download the full logs from the menu once the workflow run has completed. [0] https://github.com/kernel-patches/bpf/runs/3606513281?check_suite_focus=true > > RFC v1 -> v2 > v1: https://lore.kernel.org/bpf/20210830173424.1385796-1-memxor@xxxxxxxxx > > * Address comments from Alexei > * Reuse fd_array instead of introducing kfunc_btf_fds array > * Take btf and module reference as needed, instead of preloading > * Add BTF_KIND_FUNC relocation support to gen_loader infrastructure > * Address comments from Andrii > * Drop hashmap in libbpf for finding index of existing BTF in fd_array > * Preserve invalid kfunc calls only when the symbol is weak > * Adjust verifier selftests > > Kumar Kartikeya Dwivedi (10): > bpf: Introduce BPF support for kernel module function calls > bpf: Be conservative while processing invalid kfunc calls > bpf: btf: Introduce helpers for dynamic BTF set registration > tools: Allow specifying base BTF file in resolve_btfids > bpf: Enable TCP congestion control kfunc from modules > bpf: Bump MAX_BPF_STACK size to 768 bytes > libbpf: Support kernel module function calls > libbpf: Resolve invalid weak kfunc calls with imm = 0, off = 0 > libbpf: Update gen_loader to emit BTF_KIND_FUNC relocations > bpf, selftests: Add basic test for module kfunc call > > include/linux/bpf.h | 8 +- > include/linux/bpf_verifier.h | 2 + > include/linux/bpfptr.h | 1 + > include/linux/btf.h | 38 +++ > include/linux/filter.h | 4 +- > kernel/bpf/btf.c | 56 +++++ > kernel/bpf/core.c | 4 + > kernel/bpf/verifier.c | 217 +++++++++++++++--- > kernel/trace/bpf_trace.c | 1 + > net/bpf/test_run.c | 2 +- > net/ipv4/bpf_tcp_ca.c | 36 +-- > net/ipv4/tcp_bbr.c | 28 ++- > net/ipv4/tcp_cubic.c | 26 ++- > net/ipv4/tcp_dctcp.c | 26 ++- > scripts/Makefile.modfinal | 1 + > tools/bpf/resolve_btfids/main.c | 19 +- > tools/lib/bpf/bpf.c | 1 + > tools/lib/bpf/bpf_gen_internal.h | 12 +- > tools/lib/bpf/gen_loader.c | 93 +++++++- > tools/lib/bpf/libbpf.c | 81 +++++-- > tools/lib/bpf/libbpf_internal.h | 1 + > tools/testing/selftests/bpf/Makefile | 1 + > .../selftests/bpf/bpf_testmod/bpf_testmod.c | 23 +- > .../selftests/bpf/prog_tests/ksyms_module.c | 13 +- > .../bpf/prog_tests/ksyms_module_libbpf.c | 18 ++ > .../selftests/bpf/progs/test_ksyms_module.c | 9 + > .../bpf/progs/test_ksyms_module_libbpf.c | 35 +++ > tools/testing/selftests/bpf/verifier/calls.c | 22 +- > .../selftests/bpf/verifier/raw_stack.c | 4 +- > .../selftests/bpf/verifier/stack_ptr.c | 6 +- > .../testing/selftests/bpf/verifier/var_off.c | 4 +- > 31 files changed, 673 insertions(+), 119 deletions(-) > create mode 100644 tools/testing/selftests/bpf/prog_tests/ksyms_module_libbpf.c > create mode 100644 tools/testing/selftests/bpf/progs/test_ksyms_module_libbpf.c > > -- > 2.33.0 >