On Tue, May 7, 2024 at 4:40 AM Jose E. Marchesi <jose.marchesi@xxxxxxxxxx> wrote: > > GCC warns that `val' may be used uninitialized in the > BPF_CORE_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 initializes `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@xxxxxxxxxx> > Cc: david.faust@xxxxxxxxxx > Cc: cupertino.miranda@xxxxxxxxxx > Cc: Eduard Zingerman <eddyz87@xxxxxxxxx> > Cc: Yonghong Song <yonghong.song@xxxxxxxxx> > --- > tools/lib/bpf/bpf_core_read.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tools/lib/bpf/bpf_core_read.h b/tools/lib/bpf/bpf_core_read.h > index b5c7ce5c243a..88d129b5f0a1 100644 > --- a/tools/lib/bpf/bpf_core_read.h > +++ b/tools/lib/bpf/bpf_core_read.h > @@ -89,7 +89,7 @@ enum bpf_enum_value_kind { > */ > #define BPF_CORE_READ_BITFIELD(s, field) ({ \ > const void *p = (const void *)s + __CORE_RELO(s, field, BYTE_OFFSET); \ > - unsigned long long val; \ > + unsigned long long val = 0; \ let's add instead `default: val = 0; break;` as Yonghong mentioned, it's not expected to have invalid byte size value in the relocation pw-bot: cr > \ > /* This is a so-called barrier_var() operation that makes specified \ > * variable "a black box" for optimizing compiler. \ > -- > 2.30.2 > >