Message ID | 20241008231232.634047-1-tony.ambardar@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [bpf,v1] selftests/bpf: Fix error compiling cgroup_ancestor.c with musl libc | expand |
Hello Tony, On 10/9/24 01:12, Tony Ambardar wrote: > Existing code calls connect() with a 'struct sockaddr_in6 *' argument > where a 'struct sockaddr *' argument is declared, yielding compile errors > when building for mips64el/musl-libc: > > In file included from cgroup_ancestor.c:3: > cgroup_ancestor.c: In function 'send_datagram': > cgroup_ancestor.c:38:38: error: passing argument 2 of 'connect' from incompatible pointer type [-Werror=incompatible-pointer-types] > 38 | if (!ASSERT_OK(connect(sock, &addr, sizeof(addr)), "connect")) { > | ^~~~~ > | | > | struct sockaddr_in6 * > ./test_progs.h:343:29: note: in definition of macro 'ASSERT_OK' > 343 | long long ___res = (res); \ > | ^~~ > In file included from .../netinet/in.h:10, > from .../arpa/inet.h:9, > from ./test_progs.h:17: > .../sys/socket.h:386:19: note: expected 'const struct sockaddr *' but argument is of type 'struct sockaddr_in6 *' > 386 | int connect (int, const struct sockaddr *, socklen_t); > | ^~~~~~~~~~~~~~~~~~~~~~~ > cc1: all warnings being treated as errors > > This only compiles because of a glibc extension allowing declaration of the > argument as a "transparent union" which includes both types above. > > Explicitly cast the argument to allow compiling for both musl and glibc. Thanks for the fix and the details :) Indeed it looks like all other tests perform this cast on connect (either to (void *) or (struct sockaddr *)) to prevent this issue, so that's a miss on my side when I rewrote this test. > Cc: Alexis Lothoré (eBPF Foundation) <alexis.lothore@bootlin.com> > Fixes: f957c230e173 ("selftests/bpf: convert test_skb_cgroup_id_user to test_progs") > Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com> Reviewed-by: Alexis Lothoré <alexis.lothore@bootlin.com> > --- > tools/testing/selftests/bpf/prog_tests/cgroup_ancestor.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tools/testing/selftests/bpf/prog_tests/cgroup_ancestor.c b/tools/testing/selftests/bpf/prog_tests/cgroup_ancestor.c > index 9250a1e9f9af..3f9ffdf71343 100644 > --- a/tools/testing/selftests/bpf/prog_tests/cgroup_ancestor.c > +++ b/tools/testing/selftests/bpf/prog_tests/cgroup_ancestor.c > @@ -35,7 +35,7 @@ static int send_datagram(void) > if (!ASSERT_OK_FD(sock, "create socket")) > return sock; > > - if (!ASSERT_OK(connect(sock, &addr, sizeof(addr)), "connect")) { > + if (!ASSERT_OK(connect(sock, (struct sockaddr *)&addr, sizeof(addr)), "connect")) { > close(sock); > return -1; > }
Hello: This patch was applied to bpf/bpf.git (master) by Alexei Starovoitov <ast@kernel.org>: On Tue, 8 Oct 2024 16:12:32 -0700 you wrote: > Existing code calls connect() with a 'struct sockaddr_in6 *' argument > where a 'struct sockaddr *' argument is declared, yielding compile errors > when building for mips64el/musl-libc: > > In file included from cgroup_ancestor.c:3: > cgroup_ancestor.c: In function 'send_datagram': > cgroup_ancestor.c:38:38: error: passing argument 2 of 'connect' from incompatible pointer type [-Werror=incompatible-pointer-types] > 38 | if (!ASSERT_OK(connect(sock, &addr, sizeof(addr)), "connect")) { > | ^~~~~ > | | > | struct sockaddr_in6 * > ./test_progs.h:343:29: note: in definition of macro 'ASSERT_OK' > 343 | long long ___res = (res); \ > | ^~~ > In file included from .../netinet/in.h:10, > from .../arpa/inet.h:9, > from ./test_progs.h:17: > .../sys/socket.h:386:19: note: expected 'const struct sockaddr *' but argument is of type 'struct sockaddr_in6 *' > 386 | int connect (int, const struct sockaddr *, socklen_t); > | ^~~~~~~~~~~~~~~~~~~~~~~ > cc1: all warnings being treated as errors > > [...] Here is the summary with links: - [bpf,v1] selftests/bpf: Fix error compiling cgroup_ancestor.c with musl libc https://git.kernel.org/bpf/bpf/c/60f802e2d6e1 You are awesome, thank you!
diff --git a/tools/testing/selftests/bpf/prog_tests/cgroup_ancestor.c b/tools/testing/selftests/bpf/prog_tests/cgroup_ancestor.c index 9250a1e9f9af..3f9ffdf71343 100644 --- a/tools/testing/selftests/bpf/prog_tests/cgroup_ancestor.c +++ b/tools/testing/selftests/bpf/prog_tests/cgroup_ancestor.c @@ -35,7 +35,7 @@ static int send_datagram(void) if (!ASSERT_OK_FD(sock, "create socket")) return sock; - if (!ASSERT_OK(connect(sock, &addr, sizeof(addr)), "connect")) { + if (!ASSERT_OK(connect(sock, (struct sockaddr *)&addr, sizeof(addr)), "connect")) { close(sock); return -1; }
Existing code calls connect() with a 'struct sockaddr_in6 *' argument where a 'struct sockaddr *' argument is declared, yielding compile errors when building for mips64el/musl-libc: In file included from cgroup_ancestor.c:3: cgroup_ancestor.c: In function 'send_datagram': cgroup_ancestor.c:38:38: error: passing argument 2 of 'connect' from incompatible pointer type [-Werror=incompatible-pointer-types] 38 | if (!ASSERT_OK(connect(sock, &addr, sizeof(addr)), "connect")) { | ^~~~~ | | | struct sockaddr_in6 * ./test_progs.h:343:29: note: in definition of macro 'ASSERT_OK' 343 | long long ___res = (res); \ | ^~~ In file included from .../netinet/in.h:10, from .../arpa/inet.h:9, from ./test_progs.h:17: .../sys/socket.h:386:19: note: expected 'const struct sockaddr *' but argument is of type 'struct sockaddr_in6 *' 386 | int connect (int, const struct sockaddr *, socklen_t); | ^~~~~~~~~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors This only compiles because of a glibc extension allowing declaration of the argument as a "transparent union" which includes both types above. Explicitly cast the argument to allow compiling for both musl and glibc. Cc: Alexis Lothoré (eBPF Foundation) <alexis.lothore@bootlin.com> Fixes: f957c230e173 ("selftests/bpf: convert test_skb_cgroup_id_user to test_progs") Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com> --- tools/testing/selftests/bpf/prog_tests/cgroup_ancestor.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)