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@xxxxxxxxxxx> > Fixes: f957c230e173 ("selftests/bpf: convert test_skb_cgroup_id_user to test_progs") > Signed-off-by: Tony Ambardar <tony.ambardar@xxxxxxxxx> Reviewed-by: Alexis Lothoré <alexis.lothore@xxxxxxxxxxx> > --- > 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; > } -- Alexis Lothoré, Bootlin Embedded Linux and Kernel engineering https://bootlin.com