From 8eac1d365da260b80ee56135024b9dd7bc73012e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Tue, 10 Dec 2019 10:02:09 +0100 Subject: [PATCH] Ensure all zone_settimer() calls are done on locked zone (cherry picked from commit cf48e8eb326f824170f2069e5d5c33992b1783a4) --- lib/dns/zone.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 2d3189fa6d4..92a61f92cc4 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -10613,7 +10613,9 @@ zone_maintenance(dns_zone_t *zone) { default: break; } + LOCK_ZONE(zone); zone_settimer(zone, &now); + UNLOCK_ZONE(zone); } void @@ -13452,6 +13454,7 @@ zone_settimer(dns_zone_t *zone, isc_time_t *now) { isc_result_t result; REQUIRE(DNS_ZONE_VALID(zone)); + REQUIRE(LOCKED_ZONE(zone)); ENTER; if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_EXITING)) @@ -18814,6 +18817,7 @@ zone_rekey(dns_zone_t *zone) { UNLOCK_ZONE(zone); } + LOCK_ZONE(zone); isc_time_settoepoch(&zone->refreshkeytime); /* @@ -18825,11 +18829,9 @@ zone_rekey(dns_zone_t *zone) { isc_time_t timethen; isc_stdtime_t then; - LOCK_ZONE(zone); DNS_ZONE_TIME_ADD(&timenow, zone->refreshkeyinterval, &timethen); zone->refreshkeytime = timethen; - UNLOCK_ZONE(zone); for (key = ISC_LIST_HEAD(dnskeys); key != NULL; @@ -18842,13 +18844,11 @@ zone_rekey(dns_zone_t *zone) { } DNS_ZONE_TIME_ADD(&timenow, then - now, &timethen); - LOCK_ZONE(zone); if (isc_time_compare(&timethen, &zone->refreshkeytime) < 0) { zone->refreshkeytime = timethen; } - UNLOCK_ZONE(zone); } zone_settimer(zone, &timenow); @@ -18856,6 +18856,7 @@ zone_rekey(dns_zone_t *zone) { isc_time_formattimestamp(&zone->refreshkeytime, timebuf, 80); dnssec_log(zone, ISC_LOG_INFO, "next key event: %s", timebuf); } + UNLOCK_ZONE(zone); result = ISC_R_SUCCESS; -- GitLab