diff --git a/backport-libbpf-Avoid-uninitialized-value-in-BPF_CORE_READ_BI.patch b/backport-libbpf-Avoid-uninitialized-value-in-BPF_CORE_READ_BI.patch new file mode 100644 index 0000000000000000000000000000000000000000..5bda8ab0fcc5aef1e60dca3ca707a8b50a00cbd3 --- /dev/null +++ b/backport-libbpf-Avoid-uninitialized-value-in-BPF_CORE_READ_BI.patch @@ -0,0 +1,56 @@ +From 3827aa514cba7db16b81236712a46e8b70260fcd Mon Sep 17 00:00:00 2001 +From: "Jose E. Marchesi" +Date: Wed, 8 May 2024 12:13:13 +0200 +Subject: [PATCH] bpf: Avoid uninitialized value in BPF_CORE_READ_BITFIELD + +[Changes from V1: + - Use a default branch in the switch statement to initialize `val'.] + +GCC warns that `val' may be used uninitialized in the +BPF_CRE_READ_BITFIELD macro, defined in bpf_core_read.h as: + + [...] + unsigned long long val; \ + [...] \ + switch (__CORE_RELO(s, field, BYTE_SIZE)) { \ + case 1: val = *(const unsigned char *)p; break; \ + case 2: val = *(const unsigned short *)p; break; \ + case 4: val = *(const unsigned int *)p; break; \ + case 8: val = *(const unsigned long long *)p; break; \ + } \ + [...] + val; \ + } \ + +This patch adds a default entry in the switch statement that sets +`val' to zero in order to avoid the warning, and random values to be +used in case __builtin_preserve_field_info returns unexpected values +for BPF_FIELD_BYTE_SIZE. + +Tested in bpf-next master. +No regressions. + +Signed-off-by: Jose E. Marchesi +Signed-off-by: Andrii Nakryiko +Link: https://lore.kernel.org/bpf/20240508101313.16662-1-jose.marchesi@oracle.com + +Conflict: NA +Reference:https://github.com/libbpf/libbpf/commit/3827aa514cba7db16b81236712a46e8b70260fcd +--- + src/bpf_core_read.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/bpf_core_read.h b/src/bpf_core_read.h +index b5c7ce5c2..c0e13cdf9 100644 +--- a/src/bpf_core_read.h ++++ b/src/bpf_core_read.h +@@ -104,6 +104,7 @@ enum bpf_enum_value_kind { + case 2: val = *(const unsigned short *)p; break; \ + case 4: val = *(const unsigned int *)p; break; \ + case 8: val = *(const unsigned long long *)p; break; \ ++ default: val = 0; break; \ + } \ + val <<= __CORE_RELO(s, field, LSHIFT_U64); \ + if (__CORE_RELO(s, field, SIGNED)) \ + + diff --git a/libbpf.spec b/libbpf.spec index 63e9b91a497ce2cdd211af47f6e622fc24dbe3a1..66bd045c1e54bb3f2b150df28eccb3cbfe66a7fb 100644 --- a/libbpf.spec +++ b/libbpf.spec @@ -4,7 +4,7 @@ Name: %{githubname} Version: %{githubver} -Release: 13 +Release: 14 Summary: Libbpf library License: LGPLv2 or BSD @@ -42,6 +42,7 @@ Patch0025: backport-libbpf-Fix-str_has_sfxs-return-value.patch Patch0026: backport-libbpf-Initialize-err-in-probe_map_create.patch Patch0027: backport-libbpf-Modify-the-function-name-in-libbpf.c-to-match.patch Patch0028: backport-libbpf-Fix-an-error-in-64bit-relocation-value-comput.patch +Patch0029: backport-libbpf-Avoid-uninitialized-value-in-BPF_CORE_READ_BI.patch # This package supersedes libbpf from kernel-tools, # which has default Epoch: 0. By having Epoch: 1 @@ -94,6 +95,10 @@ developing applications that use %{name} %{_libdir}/libbpf.a %changelog +* Wed Sep 25 2024 zhangmingyi 2:0.8.1-14 +- backport patch from upstream: + backport-libbpf-Avoid-uninitialized-value-in-BPF_CORE_READ_BI.patch + * Thu Jun 20 2024 xiesongyang - 2:0.8.1-13 - backport patch from upstream: backport-libbpf-Fix-an-error-in-64bit-relocation-value-comput.patch