summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Yu <tlyu@mit.edu>2014-07-02 16:13:23 -0400
committerTom Yu <tlyu@mit.edu>2014-07-02 17:04:37 -0400
commit158a551b14b017d232066c4a053dc608d87fa172 (patch)
treed946d4f56bf33b0a1cbd317fe54a42669e840802
parent4bd50f73c80a86852ec0879abdf52202be40892b (diff)
downloadkrb5-158a551b14b017d232066c4a053dc608d87fa172.tar.gz
krb5-158a551b14b017d232066c4a053dc608d87fa172.tar.xz
krb5-158a551b14b017d232066c4a053dc608d87fa172.zip
Fix bugs in bindresvport_sa() changes
In svctcp_create() and svcudp_bufcreate(), set sa->sa_len on platforms where that field exists, so that a subsequent call to socklen() will return the correct result. To make the code more self-evidently correct, zero the entire struct sockaddr_storage object, using the memset(&ss, 0, sizeof(ss)) idiom. ticket: 7935
-rw-r--r--src/lib/rpc/svc_tcp.c5
-rw-r--r--src/lib/rpc/svc_udp.c5
2 files changed, 8 insertions, 2 deletions
diff --git a/src/lib/rpc/svc_tcp.c b/src/lib/rpc/svc_tcp.c
index 58f7b0e39..7b69c33da 100644
--- a/src/lib/rpc/svc_tcp.c
+++ b/src/lib/rpc/svc_tcp.c
@@ -159,8 +159,11 @@ svctcp_create(
}
set_cloexec_fd(sock);
madesock = TRUE;
- memset(sa, 0, sizeof(struct sockaddr_in));
+ memset(&ss, 0, sizeof(ss));
sa->sa_family = AF_INET;
+#ifdef HAVE_SA_LEN
+ sa->sa_len = sizeof(struct sockaddr_in);
+#endif
} else {
len = sizeof(struct sockaddr_storage);
if (getsockname(sock, sa, &len) != 0) {
diff --git a/src/lib/rpc/svc_udp.c b/src/lib/rpc/svc_udp.c
index 460472fe6..e9f1c3d00 100644
--- a/src/lib/rpc/svc_udp.c
+++ b/src/lib/rpc/svc_udp.c
@@ -130,8 +130,11 @@ svcudp_bufcreate(
}
set_cloexec_fd(sock);
madesock = TRUE;
- memset(sa, 0, sizeof(struct sockaddr_in));
+ memset(&ss, 0, sizeof(ss));
sa->sa_family = AF_INET;
+#ifdef HAVE_SA_LEN
+ sa->sa_len = sizeof(struct sockaddr_in);
+#endif
} else {
len = sizeof(struct sockaddr_storage);
if (getsockname(sock, sa, &len) < 0) {