v1: https://lore.kernel.org/bpf/20230214212809.242632-1-iii@xxxxxxxxxxxxx/T/#t v1 -> v2: Add BPF_HELPER_CALL (Stanislav). Add check_subprogs() cleanup - noticed while reviewing the code for BPF_HELPER_CALL. Drop WARN_ON_ONCE (Stanislav, Alexei). Add bpf_jit_get_func_addr() to x86_64 JIT. Hi, This series solves the problems outlined in [1, 2, 3]. The main problem is that kfuncs in modules do not fit into bpf_insn.imm on s390x; the secondary problem is that there is a conflict between "abstract" XDP metadata function BTF ids and their "concrete" addresses. The solution is to keep fkunc BTF ids in bpf_insn.imm, and put the addresses into bpf_kfunc_desc, which does not have size restrictions. Regtested with test_verifier and test_progs on x86_64 and s390x. TODO: Need to add bpf_jit_get_func_addr() to arm, sparc and i386 JITs. [1] https://lore.kernel.org/bpf/Y9%2FyrKZkBK6yzXp+@krava/ [2] https://lore.kernel.org/bpf/20230128000650.1516334-1-iii@xxxxxxxxxxxxx/ [3] https://lore.kernel.org/bpf/20230128000650.1516334-32-iii@xxxxxxxxxxxxx/ Best regards, Ilya Ilya Leoshkevich (4): bpf: Introduce BPF_HELPER_CALL bpf: Use BPF_HELPER_CALL in check_subprogs() bpf, x86: Use bpf_jit_get_func_addr() bpf: Support 64-bit pointers to kfuncs arch/x86/net/bpf_jit_comp.c | 15 ++++-- include/linux/bpf.h | 2 + include/uapi/linux/bpf.h | 4 ++ kernel/bpf/core.c | 21 ++++++-- kernel/bpf/disasm.c | 2 +- kernel/bpf/verifier.c | 95 ++++++++++++---------------------- tools/include/linux/filter.h | 2 +- tools/include/uapi/linux/bpf.h | 4 ++ 8 files changed, 75 insertions(+), 70 deletions(-) -- 2.39.1