Re: [PATCH bpf-next] libbpf: add basic BTF sanity validation

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

 



On Wed, Aug 23, 2023 at 10:04 PM Martin KaFai Lau <martin.lau@xxxxxxxxx> wrote:
>
> On 8/23/23 4:44 PM, Andrii Nakryiko wrote:
> > +/* Validate basic sanity of BTF. It's intentionally less thorough than
> > + * kernel's validation and validates only properties of BTF that libbpf relies
> > + * on to be correct (e.g., valid type IDs, valid string offsets, etc)
> > + */
> > +int btf_sanity_check(const struct btf *btf)
> > +{
> > +     const struct btf_type *t;
> > +     __u32 i, n = btf__type_cnt(btf);
> > +     int err;
> > +
> > +     for (i = 1; i < n; i++) {
> > +             t = btf_type_by_id(btf, i);
> > +             err = btf_validate_type(btf, t, i);
> > +             if (err)
> > +                     return err;
> > +     }
> > +     return 0;
> > +}
> > +
> >   static void *btf_get_raw_data(const struct btf *btf, __u32 *size, bool swap_endian);
> >
> >   int btf_load_into_kernel(struct btf *btf, char *log_buf, size_t log_sz, __u32 log_level)
> > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
> > index 4c3967d94b6d..71a3c768d9af 100644
> > --- a/tools/lib/bpf/libbpf.c
> > +++ b/tools/lib/bpf/libbpf.c
> > @@ -2833,6 +2833,13 @@ static int bpf_object__init_btf(struct bpf_object *obj,
> >                       pr_warn("Error loading ELF section %s: %d.\n", BTF_ELF_SEC, err);
> >                       goto out;
> >               }
> > +             err = btf_sanity_check(obj->btf);
>
> Should btf_sanity_check() be called in btf_parse_type_sec() instead such that
> btf__parse_elf() can also have sanity check?


yep, good point, I'll move it there, thanks!





[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