On Mon, 2024-07-22 at 22:54 -0700, Tony Ambardar wrote: > Existing code calls getsockname() with a 'struct sockaddr_in6 *' > argument > where a 'struct sockaddr *' argument is declared, yielding compile > errors > when building for mips64el/musl-libc: > > bpf_iter_setsockopt.c: In function 'get_local_port': > bpf_iter_setsockopt.c:98:30: error: passing argument 2 of > 'getsockname' from incompatible pointer type [-Werror=incompatible- > pointer-types] > 98 | if (!getsockname(fd, &addr, &addrlen)) > | ^~~~~ > | | > | struct sockaddr_in6 * > In file included from .../netinet/in.h:10, > from .../arpa/inet.h:9, > from ./test_progs.h:17, > from bpf_iter_setsockopt.c:5: > .../sys/socket.h:391:23: note: expected 'struct sockaddr * > restrict' but argument is of type 'struct sockaddr_in6 *' > 391 | int getsockname (int, struct sockaddr *__restrict, > socklen_t *__restrict); > | ^ > cc1: all warnings being treated as errors > > This compiled under glibc only because the argument is declared to be > a > "funky" transparent union which includes both types above. Explicitly > cast > the argument to allow compiling for both musl and glibc. > > Fixes: eed92afdd14c ("bpf: selftest: Test batching and > bpf_(get|set)sockopt in bpf tcp iter") > Signed-off-by: Tony Ambardar <tony.ambardar@xxxxxxxxx> > --- > tools/testing/selftests/bpf/prog_tests/bpf_iter_setsockopt.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git > a/tools/testing/selftests/bpf/prog_tests/bpf_iter_setsockopt.c > b/tools/testing/selftests/bpf/prog_tests/bpf_iter_setsockopt.c > index b52ff8ce34db..35363b104dd2 100644 > --- a/tools/testing/selftests/bpf/prog_tests/bpf_iter_setsockopt.c > +++ b/tools/testing/selftests/bpf/prog_tests/bpf_iter_setsockopt.c > @@ -95,7 +95,7 @@ static unsigned short get_local_port(int fd) > struct sockaddr_in6 addr; > socklen_t addrlen = sizeof(addr); > > - if (!getsockname(fd, &addr, &addrlen)) > + if (!getsockname(fd, (struct sockaddr *) &addr, &addrlen)) nit: Generally, a space is not required when casting: (struct sockaddr *)&addr not (struct sockaddr *) &addr. See here: $ grep -r "struct sockaddr \*) \&" tools/testing/selftests/bpf/prog_tests | wc -l 1 $ grep -r "struct sockaddr \*)\&" tools/testing/selftests/bpf/prog_tests | wc -l 33 Except this, LGTM. Acked-by: Geliang Tang <geliang@xxxxxxxxxx> > return ntohs(addr.sin6_port); > > return 0;