From: Mark Andrews Date: Thu, 21 Mar 2013 22:21:30 +0000 (+1100) Subject: 3531. [bug] win32: A uninitialized value could be returned on out X-Git-Tag: v9.6-ESV-R9rc1~26 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=60c82248ad993bd9c9ea2318db8d80b4604ee189;p=thirdparty%2Fbind9.git 3531. [bug] win32: A uninitialized value could be returned on out of memory. [RT #32960] --- diff --git a/CHANGES b/CHANGES index 5ba881c79eb..34db9d1c256 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +3531. [bug] win32: A uninitialized value could be returned on out + of memory. [RT #32960] + 3530. [contrib] Better RTT tracking in queryperf. [RT #30128] 3526. [cleanup] Set up dependencies for unit tests correctly during diff --git a/lib/isc/unix/socket.c b/lib/isc/unix/socket.c index 2f897e5450e..273388e0338 100644 --- a/lib/isc/unix/socket.c +++ b/lib/isc/unix/socket.c @@ -1889,7 +1889,7 @@ allocate_socket(isc_socketmgr_t *manager, isc_sockettype_t type, sock->sendcmsgbuf = NULL; /* - * set up cmsg buffers + * Set up cmsg buffers. */ cmsgbuflen = 0; #if defined(USE_CMSG) && defined(ISC_PLATFORM_HAVEIN6PKTINFO) @@ -1931,7 +1931,7 @@ allocate_socket(isc_socketmgr_t *manager, isc_sockettype_t type, sock->tag = NULL; /* - * set up list of readers and writers to be initially empty + * Set up list of readers and writers to be initially empty. */ ISC_LIST_INIT(sock->recv_list); ISC_LIST_INIT(sock->send_list); @@ -1946,7 +1946,7 @@ allocate_socket(isc_socketmgr_t *manager, isc_sockettype_t type, sock->bound = 0; /* - * initialize the lock + * Initialize the lock. */ result = isc_mutex_init(&sock->lock); if (result != ISC_R_SUCCESS) { @@ -1955,7 +1955,7 @@ allocate_socket(isc_socketmgr_t *manager, isc_sockettype_t type, } /* - * Initialize readable and writable events + * Initialize readable and writable events. */ ISC_EVENT_INIT(&sock->readable_ev, sizeof(intev_t), ISC_EVENTATTR_NOPURGE, NULL, ISC_SOCKEVENT_INTR, diff --git a/lib/isc/win32/socket.c b/lib/isc/win32/socket.c index c94ac2ee9cd..60cf3a6549e 100644 --- a/lib/isc/win32/socket.c +++ b/lib/isc/win32/socket.c @@ -1461,7 +1461,7 @@ allocate_socket(isc_socketmgr_t *manager, isc_sockettype_t type, ISC_LINK_INIT(sock, link); /* - * set up list of readers and writers to be initially empty + * Set up list of readers and writers to be initially empty. */ ISC_LIST_INIT(sock->recv_list); ISC_LIST_INIT(sock->send_list); @@ -1483,20 +1483,16 @@ allocate_socket(isc_socketmgr_t *manager, isc_sockettype_t type, sock->recvbuf.remaining = 0; sock->recvbuf.base = isc_mem_get(manager->mctx, sock->recvbuf.len); // max buffer size if (sock->recvbuf.base == NULL) { - sock->magic = 0; + result = ISC_R_NOMEMORY; goto error; } /* - * initialize the lock + * Initialize the lock. */ result = isc_mutex_init(&sock->lock); - if (result != ISC_R_SUCCESS) { - sock->magic = 0; - isc_mem_put(manager->mctx, sock->recvbuf.base, sock->recvbuf.len); - sock->recvbuf.base = NULL; + if (result != ISC_R_SUCCESS) goto error; - } socket_log(__LINE__, sock, NULL, EVENT, NULL, 0, 0, "allocated"); @@ -1507,6 +1503,8 @@ allocate_socket(isc_socketmgr_t *manager, isc_sockettype_t type, return (ISC_R_SUCCESS); error: + if (sock->recvbuf.base != NULL) + isc_mem_put(manager->mctx, sock->recvbuf.base, sock->recvbuf.len); isc_mem_put(manager->mctx, sock, sizeof(*sock)); return (result);