2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-31 14:35:26 +00:00

fix: dev: Fix a data race in dns_zone_getxfrintime()

The dns_zone_getxfrintime() function fails to lock the zone before
accessing its 'xfrintime' structure member, which can cause a data
race between soa_query() and the statistics channel. Add the missing
locking/unlocking pair, like it's done in numerous other similar
functions.

Closes #4976

Merge branch '4976-zone-xfrintime-data-race-fix' into 'main'

See merge request isc-projects/bind9!9591
This commit is contained in:
Arаm Sаrgsyаn
2024-10-09 10:31:09 +00:00
2 changed files with 9 additions and 3 deletions

View File

@@ -1555,7 +1555,7 @@ dns_zone_getprimaryaddr(dns_zone_t *zone);
*/ */
isc_time_t isc_time_t
dns_zone_getxfrintime(const dns_zone_t *zone); dns_zone_getxfrintime(dns_zone_t *zone);
/*%< /*%<
* Get the start time of the zone's latest major step before an incoming zone * Get the start time of the zone's latest major step before an incoming zone
* transfer is initiated. The time is set to the current time before the * transfer is initiated. The time is set to the current time before the

View File

@@ -18169,10 +18169,16 @@ dns_zone_getprimaryaddr(dns_zone_t *zone) {
} }
isc_time_t isc_time_t
dns_zone_getxfrintime(const dns_zone_t *zone) { dns_zone_getxfrintime(dns_zone_t *zone) {
isc_time_t xfrintime;
REQUIRE(DNS_ZONE_VALID(zone)); REQUIRE(DNS_ZONE_VALID(zone));
return (zone->xfrintime); LOCK_ZONE(zone);
xfrintime = zone->xfrintime;
UNLOCK_ZONE(zone);
return (xfrintime);
} }
static void static void