From 1a09fefa59a9f00ed380494ae4722a0666f1ccaa Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Fri, 9 Nov 2012 09:09:52 +1100 Subject: [PATCH] 3415. [bug] named could die with a REQUIRE failure id a valdation was canceled. [RT #31804] Squashed commit of the following: commit d414d3cb4244daeca4159ac1f8a82322e4a20e5a Author: Mark Andrews Date: Wed Nov 7 14:19:28 2012 +1100 check that val->fetch != NULL before calling dns_resolver_destroyfetch --- CHANGES | 3 +++ lib/dns/validator.c | 12 ++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/CHANGES b/CHANGES index f70bdac428..4a8f776f24 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +3415. [bug] named could die with a REQUIRE failure id a valdation + was canceled. [RT #31804] + 3414. [bug] Address locking issues found by Coverity. [RT #31626] 3413. [func] Record the number of DNS64 AAAA RRsets that have been diff --git a/lib/dns/validator.c b/lib/dns/validator.c index 8e41d0fdd4..f89d4c54ab 100644 --- a/lib/dns/validator.c +++ b/lib/dns/validator.c @@ -412,12 +412,13 @@ fetch_callback_validator(isc_task_t *task, isc_event_t *event) { if (dns_rdataset_isassociated(&val->fsigrdataset)) dns_rdataset_disassociate(&val->fsigrdataset); isc_event_free(&event); - dns_resolver_destroyfetch(&val->fetch); INSIST(val->event != NULL); validator_log(val, ISC_LOG_DEBUG(3), "in fetch_callback_validator"); LOCK(&val->lock); + if (val->fetch != NULL) + dns_resolver_destroyfetch(&val->fetch); if (CANCELED(val)) { validator_done(val, ISC_R_CANCELED); } else if (eresult == ISC_R_SUCCESS) { @@ -490,12 +491,13 @@ dsfetched(isc_task_t *task, isc_event_t *event) { if (dns_rdataset_isassociated(&val->fsigrdataset)) dns_rdataset_disassociate(&val->fsigrdataset); isc_event_free(&event); - dns_resolver_destroyfetch(&val->fetch); INSIST(val->event != NULL); validator_log(val, ISC_LOG_DEBUG(3), "in dsfetched"); LOCK(&val->lock); + if (val->fetch != NULL) + dns_resolver_destroyfetch(&val->fetch); if (CANCELED(val)) { validator_done(val, ISC_R_CANCELED); } else if (eresult == ISC_R_SUCCESS) { @@ -566,13 +568,14 @@ dsfetched2(isc_task_t *task, isc_event_t *event) { dns_db_detach(&devent->db); if (dns_rdataset_isassociated(&val->fsigrdataset)) dns_rdataset_disassociate(&val->fsigrdataset); - dns_resolver_destroyfetch(&val->fetch); INSIST(val->event != NULL); validator_log(val, ISC_LOG_DEBUG(3), "in dsfetched2: %s", dns_result_totext(eresult)); LOCK(&val->lock); + if (val->fetch != NULL) + dns_resolver_destroyfetch(&val->fetch); if (CANCELED(val)) { validator_done(val, ISC_R_CANCELED); } else if (eresult == DNS_R_CNAME || @@ -3392,13 +3395,14 @@ dlvfetched(isc_task_t *task, isc_event_t *event) { if (dns_rdataset_isassociated(&val->fsigrdataset)) dns_rdataset_disassociate(&val->fsigrdataset); isc_event_free(&event); - dns_resolver_destroyfetch(&val->fetch); INSIST(val->event != NULL); validator_log(val, ISC_LOG_DEBUG(3), "in dlvfetched: %s", dns_result_totext(eresult)); LOCK(&val->lock); + if (val->fetch != NULL) + dns_resolver_destroyfetch(&val->fetch); if (eresult == ISC_R_SUCCESS) { dns_name_format(dns_fixedname_name(&val->dlvsep), namebuf, sizeof(namebuf));