Message ID | 20210915050943.679062-1-memxor@gmail.com (mailing list archive) |
---|---|
Headers | show |
Series | Support kernel module function calls from eBPF | expand |
On Tue, Sep 14, 2021 at 10:09 PM Kumar Kartikeya Dwivedi <memxor@gmail.com> 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@gmail.com > > * 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@gmail.com > > * 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 >
On Wed, Sep 15, 2021 at 09:34:21PM IST, Andrii Nakryiko wrote: > On Tue, Sep 14, 2021 at 10:09 PM Kumar Kartikeya Dwivedi > <memxor@gmail.com> 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@gmail.com > > > > * 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 > I'll change it to not use printk in the next spin (maybe just set a variable). This probably blew up because of parallel test_progs stuff, since it would be called for each sys_enter as long the raw_tp prog is attached. -- Kartikeya
On Wed, Sep 15, 2021 at 11:03 AM Kumar Kartikeya Dwivedi <memxor@gmail.com> wrote: > > On Wed, Sep 15, 2021 at 09:34:21PM IST, Andrii Nakryiko wrote: > > On Tue, Sep 14, 2021 at 10:09 PM Kumar Kartikeya Dwivedi > > <memxor@gmail.com> 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@gmail.com > > > > > > * 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 > > > > I'll change it to not use printk in the next spin (maybe just set a variable). > This probably blew up because of parallel test_progs stuff, since it would be > called for each sys_enter as long the raw_tp prog is attached. We should always be filtering by pid for cases where we use raw_tp/tp on sys_enter*. > > -- > Kartikeya