From edb9d49ef8f2d31eb8a805b1e8671adddfdb2f57 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Wed, 4 Jan 2006 03:08:42 +0000 Subject: [PATCH] 1948. [bug] If was possible to trigger a REQUIRE failure in xfrin.c:maybe_free() if named ran out of memory. [RT #15568] --- CHANGES | 4 ++++ lib/dns/xfrin.c | 15 +++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 71d3c23c4a..f03e957cac 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ +1948. [bug] If was possible to trigger a REQUIRE failure in + xfrin.c:maybe_free() if named ran out of memory. + [RT #15568] + 1944. [cleanup] isc_hash_create() does not need a read/write lock. [RT #15522] diff --git a/lib/dns/xfrin.c b/lib/dns/xfrin.c index 4f602169d1..cac7550ad2 100644 --- a/lib/dns/xfrin.c +++ b/lib/dns/xfrin.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: xfrin.c,v 1.124.2.10 2005/11/03 23:41:22 marka Exp $ */ +/* $Id: xfrin.c,v 1.124.2.11 2006/01/04 03:08:42 marka Exp $ */ #include @@ -789,7 +789,18 @@ xfrin_create(isc_mem_t *mctx, return (ISC_R_SUCCESS); failure: - xfrin_fail(xfr, result, "failed creating transfer context"); + if (xfr->timer != NULL) + isc_timer_detach(&xfr->timer); + if (dns_name_dynamic(&xfr->name)) + dns_name_free(&xfr->name, xfr->mctx); + if (xfr->tsigkey != NULL) + dns_tsigkey_detach(&xfr->tsigkey); + if (xfr->db != NULL) + dns_db_detach(&xfr->db); + isc_task_detach(&xfr->task); + dns_zone_idetach(&xfr->zone); + isc_mem_put(mctx, xfr, sizeof(*xfr)); + return (result); }