xserver: Branch 'master'

Adam Jackson ajax at kemper.freedesktop.org
Mon Jan 8 21:23:11 UTC 2018


 os/xdmcp.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

New commits:
commit 652913cd9474946bcb29271602bacfd98f46ad0b
Author: Adam Jackson <ajax at redhat.com>
Date:   Wed Dec 13 14:53:56 2017 -0500

    os: Fix a type error in the IPv6 XDMCP code
    
    Building with strict-aliasing rightly chirps here:
    
    ../os/xdmcp.c: In function ‘XdmcpRegisterConnection’:
    ../os/xdmcp.c:489:31: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
                         &((struct sockaddr_in6 *) &address)->sin6_addr.s6_addr[12];
                                   ^~~~~~~~~~~~
    
    We have "const char *address", so &address here is a char ** (i.e., it
    points to the slot on the stack containing the pointer to the character
    array passed in as an argument). Casting that to a struct sockaddr_in6 *
    is wrong, because it means that area of the stack will be reinterpreted
    as a struct sockaddr_in6.
    
    Instead, cast address, not &address.
    
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/os/xdmcp.c b/os/xdmcp.c
index 7aeb393e6..d8c81fbf8 100644
--- a/os/xdmcp.c
+++ b/os/xdmcp.c
@@ -486,7 +486,7 @@ XdmcpRegisterConnection(int type, const char *address, int addrlen)
                      IN6_IS_ADDR_V4MAPPED((const struct in6_addr *) address)) {
                 fromAddr = &((struct sockaddr_in *) &FromAddress)->sin_addr;
                 regAddr =
-                    &((struct sockaddr_in6 *) &address)->sin6_addr.s6_addr[12];
+                    &((struct sockaddr_in6 *) address)->sin6_addr.s6_addr[12];
                 regAddrlen = sizeof(struct in_addr);
             }
         }


More information about the xorg-commit mailing list