Skip to content

Commit 05a939b

Browse files
jemarchroxanan1996
authored andcommitted
bpf: Avoid uninitialized value in BPF_CORE_READ_BITFIELD
BugLink: https://bugs.launchpad.net/bugs/2075170 [ Upstream commit 009367099eb61a4fc2af44d4eb06b6b4de7de6db ] [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 <jose.marchesi@oracle.com> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Link: https://lore.kernel.org/bpf/20240508101313.16662-1-jose.marchesi@oracle.com Signed-off-by: Sasha Levin <sashal@kernel.org> Signed-off-by: Manuel Diewald <manuel.diewald@canonical.com> Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
1 parent a2240d4 commit 05a939b

File tree

1 file changed

+1
-0
lines changed

1 file changed

+1
-0
lines changed

tools/lib/bpf/bpf_core_read.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ enum bpf_enum_value_kind {
101101
case 2: val = *(const unsigned short *)p; break; \
102102
case 4: val = *(const unsigned int *)p; break; \
103103
case 8: val = *(const unsigned long long *)p; break; \
104+
default: val = 0; break; \
104105
} \
105106
val <<= __CORE_RELO(s, field, LSHIFT_U64); \
106107
if (__CORE_RELO(s, field, SIGNED)) \

0 commit comments

Comments
 (0)