[tor-commits] [torsocks/master] Fix: strict aliasing in library

dgoulet at torproject.org dgoulet at torproject.org
Fri Apr 4 22:40:27 UTC 2014


commit 506f1dc40cc2f7991f4d27285d050daf2f7ff14e
Author: David Goulet <dgoulet at ev0ke.net>
Date:   Wed Mar 12 20:08:03 2014 -0400

    Fix: strict aliasing in library
    
    Fixes #28
    
    Signed-off-by: David Goulet <dgoulet at ev0ke.net>
---
 src/lib/gethostbyname.c |    8 ++++----
 src/lib/recv.c          |    7 +++----
 2 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/src/lib/gethostbyname.c b/src/lib/gethostbyname.c
index 6b4ea21..322f398 100644
--- a/src/lib/gethostbyname.c
+++ b/src/lib/gethostbyname.c
@@ -94,8 +94,8 @@ LIBC_GETHOSTBYNAME_RET_TYPE tsocks_gethostbyname(LIBC_GETHOSTBYNAME_SIG)
 	tsocks_he.h_addrtype = AF_INET;
 	tsocks_he.h_addr_list = tsocks_he_addr_list;
 
-	DBG("Hostname %s resolved to %s", name,
-			inet_ntoa(*((struct in_addr *) &ip)));
+	DBG("[gethostbyname] Hostname %s resolved to %u.%u.%u.%u", name,
+			ip & 0XFF, (ip >> 8) & 0XFF, (ip >> 16) & 0XFF, (ip >> 24) & 0xFF);
 
 	errno = 0;
 	return &tsocks_he;
@@ -368,8 +368,8 @@ LIBC_GETHOSTBYNAME_R_RET_TYPE tsocks_gethostbyname_r(LIBC_GETHOSTBYNAME_R_SIG)
 	he->h_length = sizeof(in_addr_t);
 	he->h_addrtype = AF_INET;
 
-	DBG("[gethostbyname_r] Hostname %s resolved to %s", name,
-			inet_ntoa(*((struct in_addr *) &ip)));
+	DBG("[gethostbyname_r] Hostname %s resolved to %u.%u.%u.%u", name,
+			ip & 0XFF, (ip >> 8) & 0XFF, (ip >> 16) & 0XFF, (ip >> 24) & 0xFF);
 
 error:
 	return ret;
diff --git a/src/lib/recv.c b/src/lib/recv.c
index b041f6d..036fa91 100644
--- a/src/lib/recv.c
+++ b/src/lib/recv.c
@@ -67,7 +67,7 @@ LIBC_RECVMSG_RET_TYPE tsocks_recvmsg(LIBC_RECVMSG_SIG)
 	 * further.
 	 */
 	if (cmsg->cmsg_type == SCM_RIGHTS || cmsg->cmsg_level == SOL_SOCKET) {
-		struct sockaddr_storage addr;
+		struct sockaddr addr;
 		socklen_t addrlen;
 		sa_family_t family = AF_UNSPEC;
 
@@ -75,14 +75,13 @@ LIBC_RECVMSG_RET_TYPE tsocks_recvmsg(LIBC_RECVMSG_SIG)
 
 		/* Get socket protocol family. */
 		addrlen = sizeof(addr);
-		ret = getsockname(fd, (struct sockaddr *) &addr, &addrlen);
+		ret = getsockname(fd, &addr, &addrlen);
 		if (ret < 0) {
 			/* Use the getsockname() errno value. */
 			goto end;
 		}
 
-		family = ((struct sockaddr *) &addr)->sa_family;
-
+		family = addr.sa_family;
 		if (family == AF_INET || family == AF_INET6) {
 			ERR("[recvmsg] Inet socket passing detected. Aborting everything! "
 					"A non Tor socket could be used thus leaking information.");





More information about the tor-commits mailing list