On Tue, Jun 21, 2022 at 10:13:44PM +0200, Toke Høiland-Jørgensen wrote: > commit f858c2b2ca04fc7ead291821a793638ae120c11d upstream > > The verifier allows programs to call global functions as long as their > argument types match, using BTF to check the function arguments. One of the > allowed argument types to such global functions is PTR_TO_CTX; however the > check for this fails on BPF_PROG_TYPE_EXT functions because the verifier > uses the wrong type to fetch the vmlinux BTF ID for the program context > type. This failure is seen when an XDP program is loaded using > libxdp (which loads it as BPF_PROG_TYPE_EXT and attaches it to a global XDP > type program). > > Fix the issue by passing in the target program type instead of the > BPF_PROG_TYPE_EXT type to bpf_prog_get_ctx() when checking function > argument compatibility. > > The first Fixes tag refers to the latest commit that touched the code in > question, while the second one points to the code that first introduced > the global function call verification. > > v2: > - Use resolve_prog_type() > > Fixes: 3363bd0cfbb8 ("bpf: Extend kfunc with PTR_TO_CTX, PTR_TO_MEM argument support") > Fixes: 51c39bb1d5d1 ("bpf: Introduce function-by-function verification") > Reported-by: Simon Sundberg <simon.sundberg@xxxxxx> > Signed-off-by: Toke Høiland-Jørgensen <toke@xxxxxxxxxx> > Link: https://lore.kernel.org/r/20220606075253.28422-1-toke@xxxxxxxxxx > Signed-off-by: Alexei Starovoitov <ast@xxxxxxxxxx> > [ backport: open-code missing resolve_prog_type() helper, resolve context diff ] > Signed-off-by: Toke Høiland-Jørgensen <toke@xxxxxxxxxx> All now queued up, thanks. greg k-h