From: Tom Yu Date: Wed, 2 Jul 2014 20:13:23 +0000 (-0400) Subject: Fix bugs in bindresvport_sa() changes X-Git-Tag: krb5-1.13-alpha1~71 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F165%2Fhead;p=thirdparty%2Fkrb5.git 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 --- 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) {