Skip to content

Commit 28de3b7

Browse files
jemarchsmb49
authored andcommitted
bpf: Avoid uninitialized value in BPF_CORE_READ_BITFIELD
BugLink: https://bugs.launchpad.net/bugs/2077600 [ Upstream commit 0093670 ] [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 <[email protected]> Signed-off-by: Andrii Nakryiko <[email protected]> Link: https://lore.kernel.org/bpf/[email protected] Signed-off-by: Sasha Levin <[email protected]> Signed-off-by: Portia Stephens <[email protected]> Signed-off-by: Roxana Nicolescu <[email protected]>
1 parent 9354881 commit 28de3b7

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
@@ -102,6 +102,7 @@ enum bpf_enum_value_kind {
102102
case 2: val = *(const unsigned short *)p; break; \
103103
case 4: val = *(const unsigned int *)p; break; \
104104
case 8: val = *(const unsigned long long *)p; break; \
105+
default: val = 0; break; \
105106
} \
106107
val <<= __CORE_RELO(s, field, LSHIFT_U64); \
107108
if (__CORE_RELO(s, field, SIGNED)) \

0 commit comments

Comments
 (0)