krb5 commit: Fix bugs in bindresvport_sa() changes

Tom Yu tlyu at MIT.EDU
Wed Jul 2 17:17:56 EDT 2014


https://github.com/krb5/krb5/commit/158a551b14b017d232066c4a053dc608d87fa172
commit 158a551b14b017d232066c4a053dc608d87fa172
Author: Tom Yu <tlyu at mit.edu>
Date:   Wed Jul 2 16:13:23 2014 -0400

    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

 src/lib/rpc/svc_tcp.c |    5 ++++-
 src/lib/rpc/svc_udp.c |    5 ++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/lib/rpc/svc_tcp.c b/src/lib/rpc/svc_tcp.c
index 58f7b0e..7b69c33 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 460472f..e9f1c3d 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) {


More information about the cvs-krb5 mailing list