[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