From: Andreas Schneider Date: Thu, 2 Apr 2020 12:16:10 +0000 (+0200) Subject: s3:smbd: Fix strict aliasing in get_socket_port() X-Git-Tag: talloc-2.3.2~687 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=afb5cee6e783048fccc1f2d8fed462adecce4d9a;p=thirdparty%2Fsamba.git s3:smbd: Fix strict aliasing in get_socket_port() Signed-off-by: Andreas Schneider Reviewed-by: Jeremy Allison Autobuild-User(master): Jeremy Allison Autobuild-Date(master): Thu Aug 27 21:59:17 UTC 2020 on sn-devel-184 --- diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 63d62a88a46..debdb8487b6 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -549,14 +549,15 @@ bool check_fsp_ntquota_handle(connection_struct *conn, struct smb_request *req, static int get_socket_port(int fd) { - struct sockaddr_storage sa; - socklen_t length = sizeof(sa); + struct samba_sockaddr saddr = { + .sa_socklen = sizeof(struct sockaddr_storage), + }; if (fd == -1) { return -1; } - if (getsockname(fd, (struct sockaddr *)&sa, &length) < 0) { + if (getsockname(fd, &saddr.u.sa, &saddr.sa_socklen) < 0) { int level = (errno == ENOTCONN) ? 2 : 0; DEBUG(level, ("getsockname failed. Error was %s\n", strerror(errno))); @@ -564,14 +565,12 @@ static int get_socket_port(int fd) } #if defined(HAVE_IPV6) - if (sa.ss_family == AF_INET6) { - struct sockaddr_in6 *sa_in6 = (struct sockaddr_in6 *)&sa; - return ntohs(sa_in6->sin6_port); + if (saddr.u.sa.sa_family == AF_INET6) { + return ntohs(saddr.u.in6.sin6_port); } #endif - if (sa.ss_family == AF_INET) { - struct sockaddr_in *sa_in = (struct sockaddr_in *)&sa; - return ntohs(sa_in->sin_port); + if (saddr.u.sa.sa_family == AF_INET) { + return ntohs(saddr.u.in.sin_port); } return -1; }