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!