From cda7c783c3e65ab022a8b5806cf63ce021abd33e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tatuya=20JINMEI=20=E7=A5=9E=E6=98=8E=E9=81=94=E5=93=89?= Date: Sat, 18 Apr 2009 01:28:17 +0000 Subject: [PATCH] 2585. [bug] Uninitialized socket name could be referenced via a statistics channel, triggering an assertion failure in XML rendering. [RT #19427] --- CHANGES | 4 ++++ lib/isc/unix/socket.c | 11 +++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/CHANGES b/CHANGES index c7845ba319..37fecb8997 100644 --- 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] diff --git a/lib/isc/unix/socket.c b/lib/isc/unix/socket.c index 8062e9b980..4955b78656 100644 --- a/lib/isc/unix/socket.c +++ b/lib/isc/unix/socket.c @@ -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);