Re: [PATCH v10 bpf-next 01/10] btf: add BTF kind layout encoding to UAPI
| Newsgroups | org.kernel.vger.dwarves,org.kernel.vger.bpf |
|---|---|
| Message-ID | <df00956ee63256fa4f1cd7d847797e49362aee2963cfc771a05e9c4ef640e781@mail.kernel.org> |
> diff --git a/tools/include/uapi/linux/btf.h b/tools/include/uapi/linux/btf.h
> index 266d4ffa6c07..638615ebddc2 100644
> --- a/tools/include/uapi/linux/btf.h
> +++ b/tools/include/uapi/linux/btf.h
[ ... ]
> @@ -19,6 +29,8 @@ struct btf_header {
> __u32 type_len; /* length of type section */
> __u32 str_off; /* offset of string section */
> __u32 str_len; /* length of string section */
> + __u32 layout_off; /* offset of layout section */
> + __u32 layout_len; /* length of layout section */
> };
Adding these two fields changes sizeof(struct btf_header) from 24
to 32 bytes. In libbpf's btf_parse_hdr(), the non-native endian
path has a strict equality check:
tools/lib/bpf/btf.c:btf_parse_hdr() {
if (hdr->magic == bswap_16(BTF_MAGIC)) {
btf->swapped_endian = true;
if (bswap_32(hdr->hdr_len) != sizeof(struct btf_header)) {
pr_warn("Can't load BTF with non-native endianness "
"due to unsupported header length %u\n",
bswap_32(hdr->hdr_len));
return -ENOTSUP;
}
...
}
All existing cross-endian BTF has hdr_len=24. After this UAPI
change, sizeof(struct btf_header) becomes 32, so bswap_32(24)
!= 32 and the check rejects them.
Would it make sense to update this check in the same patch as
the header change? As-is, recompiling libbpf with the new
header breaks loading of any pre-existing non-native-endian
BTF data.
This appears to be addressed in the next patch in the series,
aa01655822a6 ("libbpf: Support layout section handling in BTF"),
which relaxes the check to a minimum size comparison.
---
AI reviewed your patch. Please fix the bug or email reply why it's not a bug.
See: https://github.com/kernel-patches/vmtest/blob/master/ci/claude/README.md
CI run summary: https://github.com/kernel-patches/bpf/actions/runs/22482435858
AI-authorship-score: low
AI-authorship-explanation: Standard UAPI structure definition from a known kernel developer with prior lore discussion links and Suggested-by tag, consistent with human authorship.
issues-found: 1
issue-severity-score: medium
issue-severity-explanation: UAPI header change increases sizeof(struct btf_header), breaking libbpf cross-endian BTF loading for all pre-existing non-native-endian BTF data; fixed in the next patch in the series.