mirror of
https://github.com/torvalds/linux.git
synced 2026-01-25 15:03:52 +08:00
libbpf: Ensure new BTF objects inherit input endianness
New split BTF needs to preserve base's endianness. Similarly, when creating a distilled BTF, we need to preserve original endianness. Fix by updating libbpf's btf__distill_base() and btf_new_empty() to retain the byte order of any source BTF objects when creating new ones. Fixes:ba451366bf("libbpf: Implement basic split BTF support") Fixes:58e185a0dc("libbpf: Add btf__distill_base() creating split BTF with distilled base BTF") Reported-by: Song Liu <song@kernel.org> Reported-by: Eduard Zingerman <eddyz87@gmail.com> Suggested-by: Eduard Zingerman <eddyz87@gmail.com> Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Tested-by: Alan Maguire <alan.maguire@oracle.com> Acked-by: Eduard Zingerman <eddyz87@gmail.com> Link: https://lore.kernel.org/bpf/6358db36c5f68b07873a0a5be2d062b1af5ea5f8.camel@gmail.com/ Link: https://lore.kernel.org/bpf/20240830095150.278881-1-tony.ambardar@gmail.com
This commit is contained in:
committed by
Andrii Nakryiko
parent
65ef66d918
commit
da18bfa59d
@@ -996,6 +996,7 @@ static struct btf *btf_new_empty(struct btf *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->swapped_endian = base_btf->swapped_endian;
|
||||
}
|
||||
|
||||
/* +1 for empty string at offset 0 */
|
||||
@@ -5394,6 +5395,9 @@ int btf__distill_base(const struct btf *src_btf, struct btf **new_base_btf,
|
||||
new_base = btf__new_empty();
|
||||
if (!new_base)
|
||||
return libbpf_err(-ENOMEM);
|
||||
|
||||
btf__set_endianness(new_base, btf__endianness(src_btf));
|
||||
|
||||
dist.id_map = calloc(n, sizeof(*dist.id_map));
|
||||
if (!dist.id_map) {
|
||||
err = -ENOMEM;
|
||||
|
||||
Reference in New Issue
Block a user