Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

bpf: Use -Wno-address-of-packed-member in some selftests

[Differences from V2:
- Remove conditionals in the source files pragmas, as the
pragma is supported by both GCC and clang.]

Both GCC and clang implement the -Wno-address-of-packed-member
warning, which is enabled by -Wall, that warns about taking the
address of a packed struct field when it can lead to an "unaligned"
address.

This triggers the following errors (-Werror) when building three
particular BPF selftests with GCC:

progs/test_cls_redirect.c
986 | if (ipv4_is_fragment((void *)&encap->ip)) {
progs/test_cls_redirect_dynptr.c
410 | pkt_ipv4_checksum((void *)&encap_gre->ip);
progs/test_cls_redirect.c
521 | pkt_ipv4_checksum((void *)&encap_gre->ip);
progs/test_tc_tunnel.c
232 | set_ipv4_csum((void *)&h_outer.ip);

These warnings do not signal any real problem in the tests as far as I
can see.

This patch adds pragmas to these test files that inhibit the
-Waddress-of-packed-member warning.

Tested in bpf-next master.
No regressions.

Signed-off-by: Jose E. Marchesi <jose.marchesi@oracle.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Acked-by: Yonghong Song <yonghong.song@linux.dev>
Link: https://lore.kernel.org/bpf/20240206102330.7113-1-jose.marchesi@oracle.com

authored by

Jose E. Marchesi and committed by
Andrii Nakryiko
c27aa462 563918a0

+6
+2
tools/testing/selftests/bpf/progs/test_cls_redirect.c
··· 22 22 23 23 #include "test_cls_redirect.h" 24 24 25 + #pragma GCC diagnostic ignored "-Waddress-of-packed-member" 26 + 25 27 #ifdef SUBPROGS 26 28 #define INLINING __noinline 27 29 #else
+2
tools/testing/selftests/bpf/progs/test_cls_redirect_dynptr.c
··· 23 23 #include "test_cls_redirect.h" 24 24 #include "bpf_kfuncs.h" 25 25 26 + #pragma GCC diagnostic ignored "-Waddress-of-packed-member" 27 + 26 28 #define offsetofend(TYPE, MEMBER) \ 27 29 (offsetof(TYPE, MEMBER) + sizeof((((TYPE *)0)->MEMBER))) 28 30
+2
tools/testing/selftests/bpf/progs/test_tc_tunnel.c
··· 20 20 #include <bpf/bpf_endian.h> 21 21 #include <bpf/bpf_helpers.h> 22 22 23 + #pragma GCC diagnostic ignored "-Waddress-of-packed-member" 24 + 23 25 static const int cfg_port = 8000; 24 26 25 27 static const int cfg_udp_src = 20000;