]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
3415. [bug] named could die with a REQUIRE failure id a valdation
authorMark Andrews <marka@isc.org>
Thu, 8 Nov 2012 22:09:52 +0000 (09:09 +1100)
committerMark Andrews <marka@isc.org>
Thu, 8 Nov 2012 22:09:52 +0000 (09:09 +1100)
                        was canceled. [RT #31804]

Squashed commit of the following:

commit d414d3cb4244daeca4159ac1f8a82322e4a20e5a
Author: Mark Andrews <marka@isc.org>
Date:   Wed Nov 7 14:19:28 2012 +1100

    check that val->fetch != NULL before calling dns_resolver_destroyfetch

CHANGES
lib/dns/validator.c

diff --git a/CHANGES b/CHANGES
index f70bdac428e1d22b62182c94bd7c69d4c5e1f558..4a8f776f24699b3e6456f14c19f4b38811da37c6 100644 (file)
--- 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
index 8e41d0fdd43109fd87ddc2136a0e6e7e4467cf00..f89d4c54abc6db9b98fe9dc9c16235a49775161b 100644 (file)
@@ -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));