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:
@@ -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
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user