From 158a551b14b017d232066c4a053dc608d87fa172 Mon Sep 17 00:00:00 2001 From: Tom Yu Date: Wed, 2 Jul 2014 16:13:23 -0400 Subject: [PATCH] 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 58f7b0e398..7b69c33da9 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 460472fe6a..e9f1c3d008 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) { -- 2.47.2