Re: [PATCH bpf-next v4 01/13] bpf: Rename 'early' BTF checking as a preparation phase
Amery Hung <[email protected]>
| Newsgroups | org.kernel.vger.bpf |
|---|---|
| Message-ID | <CAMB2axPZQrAPSGsgbOyhC1-E4CjO_Qs5Mm6WUeMKoK01tP_bZQ@mail.gmail.com> |
On Wed, Aug 5, 2026 at 2:05 PM Kumar Kartikeya Dwivedi <[email protected]> wrote: > > BTF processing is split around subprogram discovery. The first phase gets > program BTF and imports func_info because a BTF-tagged exception callback > may not be referenced by any instruction. Subprogram discovery needs this > metadata to find it. > > The later phase validates func_info and line_info against the complete > subprogram table and applies CO-RE relocations. This split breaks a real > dependency cycle rather than merely running the same checks early. > > Rename bpf_check_btf_info_early() and check_btf_func_early() to preparation > names that reflect this role. Add short call-site comments to make the two > phases and their responsibilities clear. > > No functional change is intended. > > Signed-off-by: Kumar Kartikeya Dwivedi <[email protected]> Reviewed-by: Amery Hung <[email protected]> > --- > include/linux/bpf_verifier.h | 4 ++-- > kernel/bpf/check_btf.c | 14 +++++++------- > kernel/bpf/verifier.c | 4 +++- > 3 files changed, 12 insertions(+), 10 deletions(-) > > diff --git a/include/linux/bpf_verifier.h b/include/linux/bpf_verifier.h > index a2a40caca0a0..a9555d17fd8e 100644 > --- a/include/linux/bpf_verifier.h > +++ b/include/linux/bpf_verifier.h > @@ -1177,8 +1177,8 @@ static inline void bpf_trampoline_unpack_key(u64 key, u32 *obj_id, u32 *btf_id) > *btf_id = key & 0x7FFFFFFF; > } > > -int bpf_check_btf_info_early(struct bpf_verifier_env *env, > - const union bpf_attr *attr, bpfptr_t uattr); > +int bpf_prepare_btf_info(struct bpf_verifier_env *env, > + const union bpf_attr *attr, bpfptr_t uattr); > int bpf_check_btf_info(struct bpf_verifier_env *env, > const union bpf_attr *attr, bpfptr_t uattr); > > diff --git a/kernel/bpf/check_btf.c b/kernel/bpf/check_btf.c > index 93bebe6fe12e..0e8b3ccc7a5b 100644 > --- a/kernel/bpf/check_btf.c > +++ b/kernel/bpf/check_btf.c > @@ -28,9 +28,9 @@ static int check_abnormal_return(struct bpf_verifier_env *env) > #define MIN_BPF_FUNCINFO_SIZE 8 > #define MAX_FUNCINFO_REC_SIZE 252 > > -static int check_btf_func_early(struct bpf_verifier_env *env, > - const union bpf_attr *attr, > - bpfptr_t uattr) > +static int prepare_btf_func(struct bpf_verifier_env *env, > + const union bpf_attr *attr, > + bpfptr_t uattr) > { > u32 krec_size = sizeof(struct bpf_func_info); > const struct btf_type *type, *func_proto; > @@ -407,9 +407,9 @@ static int check_core_relo(struct bpf_verifier_env *env, > return err; > } > > -int bpf_check_btf_info_early(struct bpf_verifier_env *env, > - const union bpf_attr *attr, > - bpfptr_t uattr) > +int bpf_prepare_btf_info(struct bpf_verifier_env *env, > + const union bpf_attr *attr, > + bpfptr_t uattr) > { > struct btf *btf; > int err; > @@ -429,7 +429,7 @@ int bpf_check_btf_info_early(struct bpf_verifier_env *env, > } > env->prog->aux->btf = btf; > > - err = check_btf_func_early(env, attr, uattr); > + err = prepare_btf_func(env, attr, uattr); > if (err) > return err; > return 0; > diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c > index d925197c2e5f..129e50888b90 100644 > --- a/kernel/bpf/verifier.c > +++ b/kernel/bpf/verifier.c > @@ -20317,7 +20317,8 @@ int bpf_check(struct bpf_prog **prog, union bpf_attr *attr, bpfptr_t uattr, > INIT_LIST_HEAD(&env->explored_states[i]); > INIT_LIST_HEAD(&env->free_list); > > - ret = bpf_check_btf_info_early(env, attr, uattr); > + /* Prepare BTF and func_info needed to discover all subprograms. */ > + ret = bpf_prepare_btf_info(env, attr, uattr); > if (ret < 0) > goto skip_full_check; > > @@ -20329,6 +20330,7 @@ int bpf_check(struct bpf_prog **prog, union bpf_attr *attr, bpfptr_t uattr, > if (ret < 0) > goto skip_full_check; > > + /* Validate BTF against the complete subprogram layout and apply CO-RE. */ > ret = bpf_check_btf_info(env, attr, uattr); > if (ret < 0) > goto skip_full_check; > -- > 2.53.0 > >