* [PATCH bpf-next V2] bpf: avoid uninitialized value in BPF_CORE_READ_BITFIELD
@ 2024-05-08 10:13 Jose E. Marchesi
2024-05-08 22:10 ` patchwork-bot+netdevbpf
0 siblings, 1 reply; 2+ messages in thread
From: Jose E. Marchesi @ 2024-05-08 10:13 UTC (permalink / raw)
To: bpf
Cc: Jose E . Marchesi, david.faust, cupertino.miranda,
Eduard Zingerman, Yonghong Song, Andrii Nakryiko
[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>
Cc: david.faust@oracle.com
Cc: cupertino.miranda@oracle.com
Cc: Eduard Zingerman <eddyz87@gmail.com>
Cc: Yonghong Song <yonghong.song@linux.dev>
Cc: Andrii Nakryiko <andrii.nakryiko@gmail.com>
---
tools/lib/bpf/bpf_core_read.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/tools/lib/bpf/bpf_core_read.h b/tools/lib/bpf/bpf_core_read.h
index b5c7ce5c243a..c0e13cdf9660 100644
--- a/tools/lib/bpf/bpf_core_read.h
+++ b/tools/lib/bpf/bpf_core_read.h
@@ -104,6 +104,7 @@ enum bpf_enum_value_kind {
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; \
+ default: val = 0; break; \
} \
val <<= __CORE_RELO(s, field, LSHIFT_U64); \
if (__CORE_RELO(s, field, SIGNED)) \
--
2.30.2
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH bpf-next V2] bpf: avoid uninitialized value in BPF_CORE_READ_BITFIELD
2024-05-08 10:13 [PATCH bpf-next V2] bpf: avoid uninitialized value in BPF_CORE_READ_BITFIELD Jose E. Marchesi
@ 2024-05-08 22:10 ` patchwork-bot+netdevbpf
0 siblings, 0 replies; 2+ messages in thread
From: patchwork-bot+netdevbpf @ 2024-05-08 22:10 UTC (permalink / raw)
To: Jose E. Marchesi
Cc: bpf, david.faust, cupertino.miranda, eddyz87, yonghong.song,
andrii.nakryiko
Hello:
This patch was applied to bpf/bpf-next.git (master)
by Andrii Nakryiko <andrii@kernel.org>:
On Wed, 8 May 2024 12:13:13 +0200 you wrote:
> [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; \
> } \
>
> [...]
Here is the summary with links:
- [bpf-next,V2] bpf: avoid uninitialized value in BPF_CORE_READ_BITFIELD
https://git.kernel.org/bpf/bpf-next/c/009367099eb6
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2024-05-08 22:10 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-08 10:13 [PATCH bpf-next V2] bpf: avoid uninitialized value in BPF_CORE_READ_BITFIELD Jose E. Marchesi
2024-05-08 22:10 ` patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox