]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Always call set_resigntime with the zone lock held
authorMark Andrews <marka@isc.org>
Thu, 27 Feb 2020 06:48:05 +0000 (17:48 +1100)
committerMark Andrews <marka@isc.org>
Tue, 3 Mar 2020 05:10:45 +0000 (16:10 +1100)
(cherry picked from commit 7212961849510f97146f815fa03f1e90de9d3201)

lib/dns/zone.c

index 9866f3de4b22b8389c1bf103f9dab8e521b40532..7e9a20a7383c56bbc15ef15f9c93dc4409e50ec2 100644 (file)
@@ -3818,6 +3818,8 @@ set_resigntime(dns_zone_t *zone) {
        uint32_t nanosecs;
        dns_db_t *db = NULL;
 
+       INSIST(LOCKED_ZONE(zone));
+
        /* We only re-sign zones that can be dynamically updated */
        if (zone->update_disabled) {
                return;
@@ -7130,8 +7132,8 @@ failure:
                dns_db_detach(&db);
        }
        if (result == ISC_R_SUCCESS) {
-               set_resigntime(zone);
                LOCK_ZONE(zone);
+               set_resigntime(zone);
                zone_needdump(zone, DNS_DUMP_DELAY);
                DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_NEEDNOTIFY);
                UNLOCK_ZONE(zone);
@@ -8848,7 +8850,9 @@ done:
                nsec3chain = ISC_LIST_HEAD(cleanup);
        }
 
+       LOCK_ZONE(zone);
        set_resigntime(zone);
+       UNLOCK_ZONE(zone);
 
 failure:
        if (result != ISC_R_SUCCESS) {
@@ -9586,14 +9590,13 @@ pauseall:
                signing = ISC_LIST_HEAD(cleanup);
        }
 
+       LOCK_ZONE(zone);
        set_resigntime(zone);
-
        if (commit) {
-               LOCK_ZONE(zone);
                DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_NEEDNOTIFY);
                zone_needdump(zone, DNS_DUMP_DELAY);
-               UNLOCK_ZONE(zone);
        }
+       UNLOCK_ZONE(zone);
 
 failure:
        if (result != ISC_R_SUCCESS) {