The branch, master has been updated
       via  afb5cee6e78 s3:smbd: Fix strict aliasing in get_socket_port()
      from  811e2f55290 GPO: Add rsop output for Messages policy

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit afb5cee6e783048fccc1f2d8fed462adecce4d9a
Author: Andreas Schneider <a...@samba.org>
Date:   Thu Apr 2 14:16:10 2020 +0200

    s3:smbd: Fix strict aliasing in get_socket_port()
    
    Signed-off-by: Andreas Schneider <a...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>
    
    Autobuild-User(master): Jeremy Allison <j...@samba.org>
    Autobuild-Date(master): Thu Aug 27 21:59:17 UTC 2020 on sn-devel-184

-----------------------------------------------------------------------

Summary of changes:
 source3/smbd/reply.c | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)


Changeset truncated at 500 lines:

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;
 }


-- 
Samba Shared Repository

Reply via email to