2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-09-01 06:55:30 +00:00

Add more zone locks

Add more zone locks around code that touches zone timer setting
in failure modes.
This commit is contained in:
Matthijs Mekking
2020-02-27 11:59:12 +01:00
committed by Mark Andrews
parent 7212961849
commit 143d1c9767

View File

@@ -7167,12 +7167,12 @@ failure:
} else if (db != NULL) { } else if (db != NULL) {
dns_db_detach(&db); dns_db_detach(&db);
} }
LOCK_ZONE(zone);
if (result == ISC_R_SUCCESS) { if (result == ISC_R_SUCCESS) {
LOCK_ZONE(zone);
set_resigntime(zone); set_resigntime(zone);
zone_needdump(zone, DNS_DUMP_DELAY); zone_needdump(zone, DNS_DUMP_DELAY);
DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_NEEDNOTIFY); DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_NEEDNOTIFY);
UNLOCK_ZONE(zone);
} else { } else {
/* /*
* Something failed. Retry in 5 minutes. * Something failed. Retry in 5 minutes.
@@ -7181,6 +7181,7 @@ failure:
isc_interval_set(&ival, 300, 0); isc_interval_set(&ival, 300, 0);
isc_time_nowplusinterval(&zone->resigntime, &ival); isc_time_nowplusinterval(&zone->resigntime, &ival);
} }
UNLOCK_ZONE(zone);
INSIST(version == NULL); INSIST(version == NULL);
} }
@@ -9679,6 +9680,7 @@ cleanup:
dns_db_detach(&db); dns_db_detach(&db);
} }
LOCK_ZONE(zone);
if (ISC_LIST_HEAD(zone->signing) != NULL) { if (ISC_LIST_HEAD(zone->signing) != NULL) {
isc_interval_t interval; isc_interval_t interval;
if (zone->update_disabled || result != ISC_R_SUCCESS) { if (zone->update_disabled || result != ISC_R_SUCCESS) {
@@ -9690,6 +9692,7 @@ cleanup:
} else { } else {
isc_time_settoepoch(&zone->signingtime); isc_time_settoepoch(&zone->signingtime);
} }
UNLOCK_ZONE(zone);
INSIST(version == NULL); INSIST(version == NULL);
} }
@@ -19692,6 +19695,7 @@ zone_rekey(dns_zone_t *zone) {
result = ISC_R_SUCCESS; result = ISC_R_SUCCESS;
failure: failure:
LOCK_ZONE(zone);
if (result != ISC_R_SUCCESS) { if (result != ISC_R_SUCCESS) {
/* /*
* Something went wrong; try again in ten minutes or * Something went wrong; try again in ten minutes or
@@ -19701,6 +19705,7 @@ failure:
0); 0);
isc_time_nowplusinterval(&zone->refreshkeytime, &ival); isc_time_nowplusinterval(&zone->refreshkeytime, &ival);
} }
UNLOCK_ZONE(zone);
dns_diff_clear(&diff); dns_diff_clear(&diff);
dns_diff_clear(&_sig_diff); dns_diff_clear(&_sig_diff);