Re: [PATCH bpf-next v4 03/13] bpf: Collect kfuncs after resolving program resources
Amery Hung <[email protected]>
| Newsgroups | org.kernel.vger.bpf |
|---|---|
| Message-ID | <CAMB2axMu8LVx=vFZWQ8tc3sY5FTegu3kqF2BhFnRMiZKfYm_Ew@mail.gmail.com> |
On Wed, Aug 5, 2026 at 2:05 PM Kumar Kartikeya Dwivedi <[email protected]> wrote: > > The kfunc descriptors include argument prototypes generated while calls are > collected. Some argument classifications need program auxiliary state derived > from referenced maps, such as the arena associated with the program. > > This avoids a footgun in get_kfunc_arg_type() checks where we do > validation on whether program has prog->aux->arena and it hasn't been > resolved yet. > > check_and_resolve_insns() records used maps and populates that state. It must > remain after bpf_check_btf_info(), which applies kernel-side CO-RE relocations, > so that instruction validation and the program tag observe the relocated > instruction stream. > > Move only add_kfuncs() after instruction and resource resolution. Subprogram > discovery and validation remain before the full BTF phase because that phase > needs the complete subprogram layout. Add a short comment describing the > resource resolution phase at the call site. > > Signed-off-by: Kumar Kartikeya Dwivedi <[email protected]> Reviewed-by: Amery Hung <[email protected]> > --- > kernel/bpf/verifier.c | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-) > > diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c > index 24b163c2bd63..b62e77949542 100644 > --- a/kernel/bpf/verifier.c > +++ b/kernel/bpf/verifier.c > @@ -20344,11 +20344,6 @@ int bpf_check(struct bpf_prog **prog, union bpf_attr *attr, bpfptr_t uattr, > if (ret < 0) > goto skip_full_check; > > - /* Collect the kfunc descriptors used during verification. */ > - ret = add_kfuncs(env); > - if (ret < 0) > - goto skip_full_check; > - > ret = check_subprogs(env); > if (ret < 0) > goto skip_full_check; > @@ -20358,10 +20353,16 @@ int bpf_check(struct bpf_prog **prog, union bpf_attr *attr, bpfptr_t uattr, > if (ret < 0) > goto skip_full_check; > > + /* Validate instructions and resolve the program's referenced resources. */ > ret = check_and_resolve_insns(env); > if (ret < 0) > goto skip_full_check; > > + /* Build kfunc prototypes after resolving program resources. */ > + ret = add_kfuncs(env); > + if (ret < 0) > + goto skip_full_check; > + > if (bpf_prog_is_offloaded(env->prog->aux)) { > ret = bpf_prog_offload_verifier_prep(env->prog); > if (ret) > -- > 2.53.0 > >