> On Oct 28, 2020, at 5:58 PM, Andrii Nakryiko <andrii@xxxxxxxxxx> wrote: > > Make data section layout checks stricter, disallowing overlap of types and > strings data. > > Additionally, allow BTFs with no type data. There is nothing inherently wrong > with having BTF with no types (put potentially with some strings). This could > be a situation with kernel module BTFs, if module doesn't introduce any new > type information. > > Also fix invalid offset alignment check for btf->hdr->type_off. > > Fixes: 8a138aed4a80 ("bpf: btf: Add BTF support to libbpf") > Signed-off-by: Andrii Nakryiko <andrii@xxxxxxxxxx> > --- > tools/lib/bpf/btf.c | 16 ++++++---------- > 1 file changed, 6 insertions(+), 10 deletions(-) > > diff --git a/tools/lib/bpf/btf.c b/tools/lib/bpf/btf.c > index 20c64a8441a8..9b0ef71a03d0 100644 > --- a/tools/lib/bpf/btf.c > +++ b/tools/lib/bpf/btf.c > @@ -245,22 +245,18 @@ static int btf_parse_hdr(struct btf *btf) > return -EINVAL; > } > > - if (meta_left < hdr->type_off) { > - pr_debug("Invalid BTF type section offset:%u\n", hdr->type_off); > + if (meta_left < hdr->str_off + hdr->str_len) { > + pr_debug("Invalid BTF total size:%u\n", btf->raw_size); > return -EINVAL; > } Can we make this one as if (meta_left != hdr->str_off + hdr->str_len) { > > - if (meta_left < hdr->str_off) { > - pr_debug("Invalid BTF string section offset:%u\n", hdr->str_off); > + if (hdr->type_off + hdr->type_len > hdr->str_off) { > + pr_debug("Invalid BTF data sections layout: type data at %u + %u, strings data at %u + %u\n", > + hdr->type_off, hdr->type_len, hdr->str_off, hdr->str_len); > return -EINVAL; > } And this one if (hdr->type_off + hdr->type_len != hdr->str_off) { ? [...]