]> 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:28:17 +0000 (01:28 +0000)
committerTatuya JINMEI 神明達哉 <jinmei@isc.org>
Sat, 18 Apr 2009 01:28:17 +0000 (01:28 +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 c7845ba31916bf711712953f4ec3f46615f8b8ce..37fecb89971010f045497957af55b6dbe05d32dd 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,7 @@
+2585.  [bug]           Uninitialized socket name could be referenced via a
+                       statistics channel, triggering an assertion failure in
+                       XML rendering. [RT #19427]
+
 2584.  [bug]           alpha: gcc optimization could break atomic operations.
                        [RT #19227]
 
index 8062e9b980760e39c99158e5ff69e7c645036d52..4955b786567b94356529255b98b99757c11cf1e6 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: socket.c,v 1.317 2009/03/05 03:13:55 marka Exp $ */
+/* $Id: socket.c,v 1.318 2009/04/18 01:28:17 jinmei Exp $ */
 
 /*! \file */
 
@@ -1885,6 +1885,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
         */
@@ -2324,9 +2327,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;
 
@@ -2532,11 +2532,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);