On Wed, Dec 1, 2021 at 10:11 AM Alexei Starovoitov <alexei.starovoitov@xxxxxxxxx> wrote: > > From: Alexei Starovoitov <ast@xxxxxxxxxx> > > Given BPF program's BTF root type name perform the following steps: > . search in vmlinux candidate cache. > . if (present in cache and candidate list >= 1) return candidate list. > . do a linear search through kernel BTFs for possible candidates. > . regardless of number of candidates found populate vmlinux cache. > . if (candidate list >= 1) return candidate list. > . search in module candidate cache. > . if (present in cache) return candidate list (even if list is empty). > . do a linear search through BTFs of all kernel modules > collecting candidates from all of them. > . regardless of number of candidates found populate module cache. > . return candidate list. > Then wire the result into bpf_core_apply_relo_insn(). > > When BPF program is trying to CO-RE relocate a type > that doesn't exist in either vmlinux BTF or in modules BTFs > these steps will perform 2 cache lookups when cache is hit. > > Note the cache doesn't prevent the abuse by the program that might > have lots of relocations that cannot be resolved. Hence cond_resched(). > > CO-RE in the kernel requires CAP_BPF, since BTF loading requires it. > > Signed-off-by: Alexei Starovoitov <ast@xxxxxxxxxx> > --- Looks correct as far as I can tell. Acked-by: Andrii Nakryiko <andrii@xxxxxxxxxx> > kernel/bpf/btf.c | 346 ++++++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 345 insertions(+), 1 deletion(-) > [...]