Re: [PATCH bpf-next v3 2/4] bpf: Introduce __bpf_kfunc_mark_deprecated annotation

Kumar Kartikeya Dwivedi <[email protected]>
Newsgroups dev.linux.lists.sashiko,org.kernel.vger.bpf
Message-ID <CAP01T76Z7oBJ2TyUOPqaKZnJogqYhrdZDMwi_q1N8-woaauz=g@mail.gmail.com>
On Sat, 18 Apr 2026 at 19:06, <[email protected]> wrote:
>
> Sashiko AI review found 1 potential issue(s):
> - [Medium] Programs loaded without BTF will silently bypass deprecation warnings.
> --
>
> commit 90e501a1948d112dbb3b96a16249f1f76f84b290
> Author: Kumar Kartikeya Dwivedi <[email protected]>
>
> bpf: Introduce __bpf_kfunc_mark_deprecated annotation
>
> This commit introduces the __bpf_kfunc_mark_deprecated macro to annotate
> deprecated kfuncs with a replacement. It applies this annotation to existing
> impl-suffixed kfuncs and modifies the verifier to emit warnings when these
> deprecated kfuncs are used.
>
> > diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
> > --- a/kernel/bpf/verifier.c
> > +++ b/kernel/bpf/verifier.c
>
> [ ... ]
>
> > @@ -12987,6 +12987,45 @@ static int check_return_code(struct bpf_verifier_env *env, int regno, const char
> >  static int process_bpf_exit_full(struct bpf_verifier_env *env,
> >                                bool *do_print_state, bool exception_exit);
> >
> > +static void warn_for_deprecated_kfuncs(struct bpf_verifier_env *env,
> > +                                    struct bpf_kfunc_call_arg_meta *meta,
> > +                                    int insn_idx, s16 offset)
> > +{
> > +     const struct bpf_line_info *linfo;
> > +     const char *replacement;
> > +     const struct btf_type *t;
> > +     struct bpf_kfunc_desc *desc;
> > +     const char *file;
> > +     int line_num;
> > +
> > +     if (!env->prog->aux->btf)
> > +             return;
>
> Will programs loaded without BTF silently bypass the deprecation warning?
>
> The kfunc deprecation tags are stored in the kernel or module BTF
> (meta->btf), not the program's BTF.
>
> If we return early here, we skip evaluating the tag entirely. There is a
> fallback branch below that handles missing line info which could be used to
> emit the warning even if the program doesn't have BTF.

Programs not using BTF are legacy, it is better to just ignore them.
Program BTF is needed for bpf_get_linfo_file_line().

>
> > +
> > +     t = btf_type_by_id(meta->btf, meta->func_id);
> > +     replacement = btf_find_decl_tag_value(meta->btf, t, -1, BPF_KFUNC_DECL_TAG_DEPRECATED);
>
> [ ... ]
>
> > +     linfo = bpf_find_linfo(env->prog, insn_idx);
> > +     if (linfo) {
> > +             bpf_get_linfo_file_line(env->prog->aux->btf, linfo, &file, NULL, &line_num);
> > +             warn(env, "%s:%d (insn #%d) uses deprecated kfunc %s(), which will be removed.\n",
> > +                  file, line_num, insn_idx, meta->func_name);
> > +     } else {
> > +             warn(env, "(insn #%d) uses deprecated kfunc %s(), which will be removed.\n",
> > +                  insn_idx, meta->func_name);
> > +     }
> > +
> > +     warn(env, "Switch to kfunc %s() instead.\n", replacement);
> > +     warn(env, "For older kernels, choose the correct kfunc using bpf_ksym_exists().\n");
> > +
> > +     desc->warned_deprecated = true;
> > +}
>
> --
> Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=2
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.