• Jose E. Marchesi's avatar
    bpf: Avoid uninitialized value in BPF_CORE_READ_BITFIELD · 00936709
    Jose E. Marchesi authored
    [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: default avatarJose E. Marchesi <jose.marchesi@oracle.com>
    Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20240508101313.16662-1-jose.marchesi@oracle.com
    00936709
bpf_core_read.h 21.9 KB