]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
4335. [bug] zone->view could be detached too early. [RT #41942]
authorMark Andrews <marka@isc.org>
Mon, 21 Mar 2016 01:02:00 +0000 (12:02 +1100)
committerMark Andrews <marka@isc.org>
Mon, 21 Mar 2016 02:03:36 +0000 (13:03 +1100)
(cherry picked from commit b8dcc13bc5d49aa18a80179851cf0d7a81c54887)

CHANGES
bin/named/statschannel.c
lib/dns/zone.c

diff --git a/CHANGES b/CHANGES
index 3d3d43ea92462cee10826e40cd484c7ddd378967..1a200a8c901b61fb2cfa436016a6b687ba73db2d 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,5 @@
+4335.  [bug]           zone->view could be detached too early. [RT #41942]
+
 4333.  [maint]         L.ROOT-SERVERS.NET is now 199.7.83.42 and
                        2001:500:9f::42.
 
index 4bfd52176a9ae217754b4cb77f2a29a7acec9f77..d9585ddec3498e1b58908630cce95a6c0ba53372 100644 (file)
@@ -2028,10 +2028,12 @@ ns_stats_dump(ns_server_t *server, FILE *fp) {
                if (zonestats != NULL) {
                        char zonename[DNS_NAME_FORMATSIZE];
 
-                       dns_name_format(dns_zone_getorigin(zone),
-                                       zonename, sizeof(zonename));
                        view = dns_zone_getview(zone);
+                       if (view == NULL)
+                               continue;
 
+                       dns_name_format(dns_zone_getorigin(zone),
+                                       zonename, sizeof(zonename));
                        fprintf(fp, "[%s", zonename);
                        if (strcmp(view->name, "_default") != 0)
                                fprintf(fp, " (view: %s)", view->name);
index 46700893954fc812673612739c38dd85ce31d806..73f1a6a14f9f97094254e7fcab3fb61cc2e13d6c 100644 (file)
@@ -1052,6 +1052,8 @@ zone_free(dns_zone_t *zone) {
                isc_task_detach(&zone->task);
        if (zone->loadtask != NULL)
                isc_task_detach(&zone->loadtask);
+       if (zone->view != NULL)
+               dns_view_weakdetach(&zone->view);
 
        /* Unmanaged objects */
        for (signing = ISC_LIST_HEAD(zone->signing);
@@ -11673,9 +11675,6 @@ zone_shutdown(isc_task_t *task, isc_event_t *event) {
                zone->irefs--;
        }
 
-       if (zone->view != NULL)
-               dns_view_weakdetach(&zone->view);
-
        /*
         * We have now canceled everything set the flag to allow exit_check()
         * to succeed.  We must not unlock between setting this flag and