bpf: ignore expected GCC warning in test_global_func10.c
authorJose E. Marchesi <jose.marchesi@oracle.com>
Sat, 11 May 2024 21:23:49 +0000 (23:23 +0200)
committerAlexei Starovoitov <ast@kernel.org>
Mon, 13 May 2024 00:31:24 +0000 (17:31 -0700)
The BPF selftest global_func10 in progs/test_global_func10.c contains:

  struct Small {
   long x;
  };

  struct Big {
   long x;
   long y;
  };

  [...]

  __noinline int foo(const struct Big *big)
  {
if (!big)
return 0;

return bpf_get_prandom_u32() < big->y;
  }

  [...]

  SEC("cgroup_skb/ingress")
  __failure __msg("invalid indirect access to stack")
  int global_func10(struct __sk_buff *skb)
  {
const struct Small small = {.x = skb->len };

return foo((struct Big *)&small) ? 1 : 0;
  }

GCC emits a "maybe uninitialized" warning for the code above, because
it knows `foo' accesses `big->y'.

Since the purpose of this selftest is to check that the verifier will
fail on this sort of invalid memory access, this patch just silences
the compiler warning.

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: Yonghong Song <yonghong.song@linux.dev>
Cc: Eduard Zingerman <eddyz87@gmail.com>
Link: https://lore.kernel.org/r/20240511212349.23549-1-jose.marchesi@oracle.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/testing/selftests/bpf/progs/test_global_func10.c

index 8fba3f3649e227d521c84caac140ccf9dc5812a8..5da001ca57a5f1da67dd74dc26c157f479e30a7d 100644 (file)
@@ -4,6 +4,10 @@
 #include <bpf/bpf_helpers.h>
 #include "bpf_misc.h"
 
+#if !defined(__clang__)
+#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
+#endif
+
 struct Small {
        long x;
 };