• Jose E. Marchesi's avatar
    bpf: ignore expected GCC warning in test_global_func10.c · 6a2f786e
    Jose E. Marchesi authored
    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: default avatarJose 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.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    6a2f786e
test_global_func10.c 610 Bytes