]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
libbpf: Fix parsing of multi-split BTF
authorAlan Maguire <alan.maguire@oracle.com>
Tue, 4 Nov 2025 20:33:08 +0000 (20:33 +0000)
committerAndrii Nakryiko <andrii@kernel.org>
Tue, 4 Nov 2025 21:44:12 +0000 (13:44 -0800)
When creating multi-split BTF we correctly set the start string offset
to be the size of the base string section plus the base BTF start
string offset; the latter is needed for multi-split BTF since the
offset is non-zero there.

Unfortunately the BTF parsing case needed that logic and it was
missed.

Fixes: 4e29128a9ace ("libbpf/btf: Fix string handling to support multi-split BTF")
Signed-off-by: Alan Maguire <alan.maguire@oracle.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20251104203309.318429-2-alan.maguire@oracle.com
tools/lib/bpf/btf.c

index 18907f0fcf9f0180f364339f001e05183a292b1e..9f141395c074e33d60c3da6a6d2d0c594c2c2f18 100644 (file)
@@ -1061,7 +1061,7 @@ static struct btf *btf_new(const void *data, __u32 size, struct btf *base_btf, b
        if (base_btf) {
                btf->base_btf = base_btf;
                btf->start_id = btf__type_cnt(base_btf);
-               btf->start_str_off = base_btf->hdr->str_len;
+               btf->start_str_off = base_btf->hdr->str_len + base_btf->start_str_off;
        }
 
        if (is_mmap) {
@@ -5818,7 +5818,7 @@ void btf_set_base_btf(struct btf *btf, const struct btf *base_btf)
 {
        btf->base_btf = (struct btf *)base_btf;
        btf->start_id = btf__type_cnt(base_btf);
-       btf->start_str_off = base_btf->hdr->str_len;
+       btf->start_str_off = base_btf->hdr->str_len + base_btf->start_str_off;
 }
 
 int btf__relocate(struct btf *btf, const struct btf *base_btf)