Skip to content

Commit 0093670

Browse files
jemarchanakryiko
authored andcommitted
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 <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
1 parent 911edc6 commit 0093670

1 file changed

Lines changed: 1 addition & 0 deletions

File tree

tools/lib/bpf/bpf_core_read.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ enum bpf_enum_value_kind {
104104
case 2: val = *(const unsigned short *)p; break; \
105105
case 4: val = *(const unsigned int *)p; break; \
106106
case 8: val = *(const unsigned long long *)p; break; \
107+
default: val = 0; break; \
107108
} \
108109
val <<= __CORE_RELO(s, field, LSHIFT_U64); \
109110
if (__CORE_RELO(s, field, SIGNED)) \

0 commit comments

Comments
 (0)