On Wed, Dec 1, 2021 at 10:10 AM Alexei Starovoitov <alexei.starovoitov@xxxxxxxxx> wrote: > > From: Alexei Starovoitov <ast@xxxxxxxxxx> > > v4->v5: > . Reduce number of memory allocations in candidate cache logic > . Fix couple UAF issues > . Add Andrii's patch to cleanup struct bpf_core_cand > . More thorough tests > . Planned followups: > - support -v in lskel > - move struct bpf_core_spec out of bpf_core_apply_relo_insn to > reduce stack usage > - implement bpf_core_types_are_compat > Applied to bpf-next, thanks. > v3->v4: > . complete refactor of find candidates logic. > Now it has small permanent cache. > . Fix a bug in gen_loader related to attach_kind. > . Fix BTF log size limit. > . More tests. > > v2->v3: > . addressed Andrii's feedback in every patch. > New field in union bpf_attr changed from "core_relo" to "core_relos". > . added one more test and checkpatch.pl-ed the set. > > v1->v2: > . Refactor uapi to pass 'struct bpf_core_relo' from LLVM into libbpf and further > into the kernel instead of bpf_core_apply_relo() bpf helper. Because of this > change the CO-RE algorithm has an ability to log error and debug events through > the standard bpf verifer log mechanism which was not possible with helper > approach. > . #define RELO_CORE macro was removed and replaced with btf_member_bit_offset() patch. > > This set introduces CO-RE support in the kernel. > There are several reasons to add such support: > 1. It's a step toward signed BPF programs. > 2. It allows golang like languages that struggle to adopt libbpf > to take advantage of CO-RE powers. > 3. Currently the field accessed by 'ldx [R1 + 10]' insn is recognized > by the verifier purely based on +10 offset. If R1 points to a union > the verifier picks one of the fields at this offset. > With CO-RE the kernel can disambiguate the field access. > > Alexei Starovoitov (16): > libbpf: Replace btf__type_by_id() with btf_type_by_id(). > bpf: Rename btf_member accessors. > bpf: Prepare relo_core.c for kernel duty. > bpf: Define enum bpf_core_relo_kind as uapi. > bpf: Pass a set of bpf_core_relo-s to prog_load command. > bpf: Adjust BTF log size limit. > bpf: Add bpf_core_add_cands() and wire it into > bpf_core_apply_relo_insn(). > libbpf: Use CO-RE in the kernel in light skeleton. > libbpf: Support init of inner maps in light skeleton. > libbpf: Clean gen_loader's attach kind. > selftests/bpf: Add lskel version of kfunc test. > selftests/bpf: Improve inner_map test coverage. > selftests/bpf: Convert map_ptr_kern test to use light skeleton. > selftests/bpf: Additional test for CO-RE in the kernel. > selftests/bpf: Revert CO-RE removal in test_ksyms_weak. > selftests/bpf: Add CO-RE relocations to verifier scale test. > > Andrii Nakryiko (1): > libbpf: Cleanup struct bpf_core_cand. > > include/linux/bpf.h | 8 + > include/linux/btf.h | 89 +++- > include/uapi/linux/bpf.h | 78 +++- > kernel/bpf/Makefile | 4 + > kernel/bpf/bpf_struct_ops.c | 6 +- > kernel/bpf/btf.c | 396 +++++++++++++++++- > kernel/bpf/syscall.c | 2 +- > kernel/bpf/verifier.c | 76 ++++ > net/ipv4/bpf_tcp_ca.c | 6 +- > tools/include/uapi/linux/bpf.h | 78 +++- > tools/lib/bpf/bpf_gen_internal.h | 4 + > tools/lib/bpf/btf.c | 2 +- > tools/lib/bpf/gen_loader.c | 72 +++- > tools/lib/bpf/libbpf.c | 147 ++++--- > tools/lib/bpf/libbpf_internal.h | 2 +- > tools/lib/bpf/relo_core.c | 179 +++++--- > tools/lib/bpf/relo_core.h | 73 +--- > tools/testing/selftests/bpf/Makefile | 5 +- > .../selftests/bpf/prog_tests/core_kern.c | 14 + > .../selftests/bpf/prog_tests/kfunc_call.c | 24 ++ > .../selftests/bpf/prog_tests/map_ptr.c | 16 +- > tools/testing/selftests/bpf/progs/core_kern.c | 104 +++++ > .../selftests/bpf/progs/map_ptr_kern.c | 16 +- > .../selftests/bpf/progs/test_ksyms_weak.c | 2 +- > .../selftests/bpf/progs/test_verif_scale2.c | 4 +- > 25 files changed, 1179 insertions(+), 228 deletions(-) > create mode 100644 tools/testing/selftests/bpf/prog_tests/core_kern.c > create mode 100644 tools/testing/selftests/bpf/progs/core_kern.c > > -- > 2.30.2 >