Re: [bpf-next v4] bpf: adjust btf load error logging

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Mar 12, 2025 at 3:31 PM Andrii Nakryiko
<andrii.nakryiko@xxxxxxxxx> wrote:
>
> On Wed, Mar 12, 2025 at 12:21 PM Jordan Rome <linux@xxxxxxxxxxxxxx> wrote:
> >
> > On Wed, Mar 12, 2025 at 2:40 PM Andrii Nakryiko
> > <andrii.nakryiko@xxxxxxxxx> wrote:
> > >
> > > On Tue, Mar 11, 2025 at 6:04 PM Jordan Rome <linux@xxxxxxxxxxxxxx> wrote:
> > > >
> > > > For kernels where btf is not mandatory
> > > > we should log loading errors with `pr_info`
> > > > and not retry where we increase the log level
> > > > as this is just added noise.
> > > >
> > > > Signed-off-by: Jordan Rome <linux@xxxxxxxxxxxxxx>
> > > > ---
> > > >  tools/lib/bpf/btf.c             | 36 ++++++++++++++++++---------------
> > > >  tools/lib/bpf/libbpf.c          |  3 ++-
> > > >  tools/lib/bpf/libbpf_internal.h |  2 +-
> > > >  3 files changed, 23 insertions(+), 18 deletions(-)
> > > >
> > > > diff --git a/tools/lib/bpf/btf.c b/tools/lib/bpf/btf.c
> > > > index eea99c766a20..7da4807451bb 100644
> > > > --- a/tools/lib/bpf/btf.c
> > > > +++ b/tools/lib/bpf/btf.c
> > > > @@ -1379,9 +1379,10 @@ static void *btf_get_raw_data(const struct btf *btf, __u32 *size, bool swap_endi
> > > >
> > > >  int btf_load_into_kernel(struct btf *btf,
> > > >                          char *log_buf, size_t log_sz, __u32 log_level,
> > > > -                        int token_fd)
> > > > +                        int token_fd, bool btf_mandatory)
> > > >  {
> > > >         LIBBPF_OPTS(bpf_btf_load_opts, opts);
> > > > +       enum libbpf_print_level print_level;
> > > >         __u32 buf_sz = 0, raw_size;
> > > >         char *buf = NULL, *tmp;
> > > >         void *raw_data;
> > > > @@ -1435,22 +1436,25 @@ int btf_load_into_kernel(struct btf *btf,
> > > >
> > > >         btf->fd = bpf_btf_load(raw_data, raw_size, &opts);
> > > >         if (btf->fd < 0) {
> > > > -               /* time to turn on verbose mode and try again */
> > > > -               if (log_level == 0) {
> > > > -                       log_level = 1;
> > > > -                       goto retry_load;
> > > > +               if (btf_mandatory) {
> > > > +                       /* time to turn on verbose mode and try again */
> > > > +                       if (log_level == 0) {
> > > > +                               log_level = 1;
> > > > +                               goto retry_load;
> > > > +                       }
> > > > +                       /* only retry if caller didn't provide custom log_buf, but
> > > > +                        * make sure we can never overflow buf_sz
> > > > +                        */
> > > > +                       if (!log_buf && errno == ENOSPC && buf_sz <= UINT_MAX / 2)
> > >
> > > Original behavior was to go from log_level 0 to log_level 1 when the
> > > user provided custom log_buf, which would happen even for
> > > non-btf_mandatory case. I'd like to not change that behavior.
> > >
> >
> > I don't quite understand why we want to increase the log level
> > if btf is not mandatory. Users will still get an info message that
> > btf failed to load and if they are still curious, they can increase
> > the log level themselves right? The goal of this patch is to reduce
> > log noise in cases where btf fails to load and is not mandatory.
>
> Program's BTF is almost always not mandatory, so we'll basically never
> log BTF verification failure (only for struct_ops stuff), even with
> user-provided custom log buffer, which makes this whole logic much
> less useful.
>
> Perhaps we just need to keep existing logic as is? It's not expected
> for BTF to fail to be loaded into the kernel, even for old kernels.
> libbpf does BTF sanitization for that reason. So when this BTF loading
> fails, it usually does indicate a real issue.
>
> That's exactly what happened with the original issue that prompted
> your patches. And that's a good thing that the user was bothered by
> those warnings, which eventually led to fixing an issue with a missing
> patch in their backported kernel, right?
>
> Let's just keep things as is for now. I'd rather users complain about
> this rather than these BTF upload failures go unnoticed forever.
>

Fair enough.

> >
> > > Did you find some problem with the code I proposed a few emails back?
> >
> > Truth be told, I didn't like the added complexity in the conditionals.
> > I tried something similar in an earlier version and it led to a SEGFAULT
> > when trying to access `buf[0]` which had not been allocated.
> >
> > > If not, why not do that instead and preserve that custom log_buf and
> > > log_level upgrade behavior?
> > >
> > > pw-bot: cr
> > >
>
> [...]





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux