From: Mark Andrews Date: Tue, 30 Oct 2001 01:14:00 +0000 (+0000) Subject: pullup: X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3c59fe6ed2fb7a64a82d29dcbc52c073fcd7a236;p=thirdparty%2Fbind9.git pullup: running out of memory during ns_client_t construction could crash server [RT #409] --- diff --git a/bin/named/client.c b/bin/named/client.c index 272571b3940..d166a021274 100644 --- a/bin/named/client.c +++ b/bin/named/client.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: client.c,v 1.136.2.8 2001/10/12 01:08:20 marka Exp $ */ +/* $Id: client.c,v 1.136.2.9 2001/10/30 01:14:00 marka Exp $ */ #include @@ -1542,9 +1542,6 @@ client_create(ns_clientmgr_t *manager, ns_client_t **clientp) if (result != ISC_R_SUCCESS) goto cleanup_client; isc_task_setname(client->task, "client", client); - result = isc_task_onshutdown(client->task, client_shutdown, client); - if (result != ISC_R_SUCCESS) - goto cleanup_task; client->timer = NULL; result = isc_timer_create(manager->timermgr, isc_timertype_inactive, @@ -1616,12 +1613,19 @@ client_create(ns_clientmgr_t *manager, ns_client_t **clientp) if (result != ISC_R_SUCCESS) goto cleanup_sendbuf; + result = isc_task_onshutdown(client->task, client_shutdown, client); + if (result != ISC_R_SUCCESS) + goto cleanup_query; + CTRACE("create"); *clientp = client; return (ISC_R_SUCCESS); + cleanup_query: + ns_query_free(client); + cleanup_sendbuf: isc_mem_put(manager->mctx, client->sendbuf, SEND_BUFFER_SIZE);