]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
2585. [bug] Uninitialized socket name could be referenced via a
authorTatuya JINMEI 神明達哉 <jinmei@isc.org>
Sat, 18 Apr 2009 01:29:26 +0000 (01:29 +0000)
committerTatuya JINMEI 神明達哉 <jinmei@isc.org>
Sat, 18 Apr 2009 01:29:26 +0000 (01:29 +0000)
statistics channel, triggering an assertion failure in
XML rendering. [RT #19427]

CHANGES
lib/isc/unix/socket.c

diff --git a/CHANGES b/CHANGES
index 5f1a91c3ff25fb26db86613f3a2d1b9cb4bc7528..1e95bd91932f99b8d654de248f296de907dd73c9 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+2585.  [bug]           Uninitialized socket name could be referenced via a
+                       statistics channel, triggering an assertion failure in
+                       XML rendering. [RT #19427]
 
        --- 9.6.1b1 released ---
 
index f0a320e988dc8c2c1a2536d679078c156784abcd..d09fe51ab57ce6ce728b11a7765fd0b710c6deaa 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: socket.c,v 1.308.12.7 2009/02/16 00:24:04 marka Exp $ */
+/* $Id: socket.c,v 1.308.12.8 2009/04/18 01:29:26 jinmei Exp $ */
 
 /*! \file */
 
@@ -1878,6 +1878,9 @@ allocate_socket(isc_socketmgr_t *manager, isc_sockettype_t type,
                        goto error;
        }
 
+       memset(sock->name, 0, sizeof(sock->name));
+       sock->tag = NULL;
+
        /*
         * set up list of readers and writers to be initially empty
         */
@@ -2317,9 +2320,6 @@ isc_socket_create(isc_socketmgr_t *manager, int pf, isc_sockettype_t type,
                return (result);
        }
 
-       memset(sock->name, 0, sizeof(sock->name));
-       sock->tag = NULL;
-
        sock->references = 1;
        *socketp = sock;
 
@@ -2525,11 +2525,14 @@ isc_socket_close(isc_socket_t *sock) {
        type = sock->type;
        fd = sock->fd;
        sock->fd = -1;
+       memset(sock->name, 0, sizeof(sock->name));
+       sock->tag = NULL;
        sock->listener = 0;
        sock->connected = 0;
        sock->connecting = 0;
        sock->bound = 0;
        isc_sockaddr_any(&sock->peer_address);
+
        UNLOCK(&sock->lock);
 
        closesocket(manager, sock, fd);