On Wed, Oct 27, 2021 at 11:35 PM Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> wrote: > > This helper allows us to get the address of a kernel symbol from inside > a BPF_PROG_TYPE_SYSCALL prog (used by gen_loader), so that we can > relocate typeless ksym vars. > > Acked-by: Song Liu <songliubraving@xxxxxx> > Signed-off-by: Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> > --- > include/linux/bpf.h | 1 + > include/uapi/linux/bpf.h | 16 ++++++++++++++++ > kernel/bpf/syscall.c | 27 +++++++++++++++++++++++++++ > tools/include/uapi/linux/bpf.h | 16 ++++++++++++++++ > 4 files changed, 60 insertions(+) > [...] > +BPF_CALL_4(bpf_kallsyms_lookup_name, const char *, name, int, name_sz, int, flags, u64 *, res) > +{ > + if (flags) > + return -EINVAL; > + > + if (name_sz <= 1 || name[name_sz - 1]) > + return -EINVAL; > + > + if (!bpf_dump_raw_ok(current_cred())) > + return -EPERM; > + > + *res = kallsyms_lookup_name(name); > + return *res ? 0 : -ENOENT; > +} > + > +const struct bpf_func_proto bpf_kallsyms_lookup_name_proto = { > + .func = bpf_kallsyms_lookup_name, > + .gpl_only = false, > + .ret_type = RET_INTEGER, > + .arg1_type = ARG_PTR_TO_MEM, > + .arg2_type = ARG_CONST_SIZE, can you make it ARG_CONST_SIZE_OR_ZERO? Not because zero makes sense, but because it removes the need to prove to the verifier that the size (which you can get at runtime) is > 0. Just less unnecessary fussing with preventing Clang optimizations. > + .arg3_type = ARG_ANYTHING, > + .arg4_type = ARG_PTR_TO_LONG, > +}; > + [...]