]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
tools/resolve_btfids: Fix cross-compilation to non-host endianness
authorViktor Malik <vmalik@redhat.com>
Tue, 6 Feb 2024 12:46:10 +0000 (13:46 +0100)
committerSasha Levin <sashal@kernel.org>
Tue, 26 Mar 2024 22:19:27 +0000 (18:19 -0400)
commite4c4a0213029364d0d3b815fa0ec38ecaf341815
tree9321813f131eb39f2b39dcdaa9a6223fbbcc5c24
parent29d1ee8e7aa219c99187fe13c342d267b731dfe3
tools/resolve_btfids: Fix cross-compilation to non-host endianness

[ Upstream commit 903fad4394666bc23975c93fb58f137ce64b5192 ]

The .BTF_ids section is pre-filled with zeroed BTF ID entries during the
build and afterwards patched by resolve_btfids with correct values.
Since resolve_btfids always writes in host-native endianness, it relies
on libelf to do the translation when the target ELF is cross-compiled to
a different endianness (this was introduced in commit 61e8aeda9398
("bpf: Fix libelf endian handling in resolv_btfids")).

Unfortunately, the translation will corrupt the flags fields of SET8
entries because these were written during vmlinux compilation and are in
the correct endianness already. This will lead to numerous selftests
failures such as:

    $ sudo ./test_verifier 502 502
    #502/p sleepable fentry accept FAIL
    Failed to load prog 'Invalid argument'!
    bpf_fentry_test1 is not sleepable
    verification time 34 usec
    stack depth 0
    processed 0 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
    Summary: 0 PASSED, 0 SKIPPED, 1 FAILED

Since it's not possible to instruct libelf to translate just certain
values, let's manually bswap the flags (both global and entry flags) in
resolve_btfids when needed, so that libelf then translates everything
correctly.

Fixes: ef2c6f370a63 ("tools/resolve_btfids: Add support for 8-byte BTF sets")
Signed-off-by: Viktor Malik <vmalik@redhat.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/7b6bff690919555574ce0f13d2a5996cacf7bf69.1707223196.git.vmalik@redhat.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
tools/bpf/resolve_btfids/main.c