From: David Woodhouse Date: Mon, 16 Jul 2012 20:20:45 +0000 (+0100) Subject: Fix strict-aliasing warning with DTLS local port handling X-Git-Tag: v4.06~2 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=ae7da9811d013e4d1c86900e5fb65f50eff9f636;p=users%2Fdwmw2%2Fopenconnect.git Fix strict-aliasing warning with DTLS local port handling Signed-off-by: David Woodhouse --- diff --git a/dtls.c b/dtls.c index 46413a41..2e5b48b1 100644 --- a/dtls.c +++ b/dtls.c @@ -520,18 +520,21 @@ int connect_dtls_socket(struct openconnect_info *vpninfo) } if (vpninfo->dtls_local_port) { - struct sockaddr_storage dtls_bind_addr; + union { + struct sockaddr_in in; + struct sockaddr_in6 in6; + } dtls_bind_addr; int dtls_bind_addrlen; memset(&dtls_bind_addr, 0, sizeof(dtls_bind_addr)); if (vpninfo->peer_addr->sa_family == AF_INET) { - struct sockaddr_in *addr = (struct sockaddr_in *)&dtls_bind_addr; + struct sockaddr_in *addr = &dtls_bind_addr.in; dtls_bind_addrlen = sizeof(*addr); addr->sin_family = AF_INET; addr->sin_addr.s_addr = INADDR_ANY; addr->sin_port = htons(vpninfo->dtls_local_port); } else if (vpninfo->peer_addr->sa_family == AF_INET6) { - struct sockaddr_in6 *addr = (struct sockaddr_in6 *)&dtls_bind_addr; + struct sockaddr_in6 *addr = &dtls_bind_addr.in6; dtls_bind_addrlen = sizeof(*addr); addr->sin6_family = AF_INET6; addr->sin6_addr = in6addr_any;