diff --git a/backport-btf_encoder-Fix-dwarf-int-type-with-greater-than-16-.patch b/backport-btf_encoder-Fix-dwarf-int-type-with-greater-than-16-.patch new file mode 100644 index 0000000000000000000000000000000000000000..4a931eaefe8eaf17bb75eb566992858a7359d887 --- /dev/null +++ b/backport-btf_encoder-Fix-dwarf-int-type-with-greater-than-16-.patch @@ -0,0 +1,47 @@ +From b9607b8bf5fe3180ae4cd44cddaf054e5595e699 Mon Sep 17 00:00:00 2001 +From: Yonghong Song +Date: Wed, 24 Apr 2024 15:35:38 -0700 +Subject: [PATCH dwarves] btf_encoder: Fix dwarf int type with greater-than-16 byte issue + +Nick Desaulniers and Xin Liu separately reported that int type might +have greater-than-16 byte size ([1] and [2]). More specifically, the +reported int type sizes are 1024 and 64 bytes. + +The libbpf and bpf program does not really support any int type greater +than 16 bytes. Therefore, with current pahole, btf encoding will fail +with greater-than-16 byte int types. + +Since for now bpf does not support '> 16' bytes int type, the simplest +way is to sanitize such types, similar to existing conditions like +'!byte_sz' and 'byte_sz & (byte_sz - 1)'. This way, pahole won't +call libbpf with an unsupported int type size. The patch [3] was +proposed before. Now I resubmitted this patch as there are another +failure due to the same issue. + + [1] https://github.com/libbpf/libbpf/pull/680 + [2]https://lore.kernel.org/bpf/20240422144538.351722-1-liuxin350@huawei.com/ + [3] https://lore.kernel.org/bpf/20230426055030.3743074-1-yhs@fb.com/ + +Cc: Xin Liu +Cc: Alan Maguire +Signed-off-by: Yonghong Song +--- + btf_encoder.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/btf_encoder.c b/btf_encoder.c +index 65f6e71..1aa0ad0 100644 +--- a/btf_encoder.c ++++ b/btf_encoder.c +@@ -394,7 +394,7 @@ static int32_t btf_encoder__add_base_type(struct btf_encoder *encoder, const str + * these non-regular int types to avoid libbpf/kernel complaints. + */ + byte_sz = BITS_ROUNDUP_BYTES(bt->bit_size); +- if (!byte_sz || (byte_sz & (byte_sz - 1))) { ++ if (!byte_sz || (byte_sz & (byte_sz - 1)) || byte_sz > 16) { + name = "__SANITIZED_FAKE_INT__"; + byte_sz = 4; + } +-- +2.33.0 + diff --git a/dwarves.spec b/dwarves.spec index 1749f4bfd9eb0ed4d13d2021732304ed65cec376..58507917c104fb8d4469d2dec1b686b6ac42ba9d 100644 --- a/dwarves.spec +++ b/dwarves.spec @@ -4,7 +4,7 @@ Name: dwarves Version: 1.25 -Release: 1 +Release: 2 License: GPLv2 Summary: Debugging Information Manipulation Tools URL: http://acmel.wordpress.com @@ -16,6 +16,8 @@ BuildRequires: cmake BuildRequires: zlib-devel BuildRequires: elfutils-devel >= 0.170 +Patch0: backport-btf_encoder-Fix-dwarf-int-type-with-greater-than-16-.patch + %description dwarves is a set of tools that use the debugging information inserted in ELF binaries by compilers such as GCC, used by well known debuggers such as @@ -82,6 +84,12 @@ make install DESTDIR=%{buildroot} %{_libdir}/%{libname}_reorganize.so %changelog +* Mon Jul 29 2024 - liuxin - 1.25-2 +- Type:bugfix +- ID:NA +- SUG:NA +- DESC: fix dwarf int type with greater than 16 bytes issue + * Sat Aug 19 2023 - Chenxi Mao - 1.25-1 - Type:bugfix - ID:NA