]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Fix TSAN data race accessing zone->parentcatz
authorOndřej Surý <ondrej@isc.org>
Mon, 24 Jul 2023 14:10:47 +0000 (16:10 +0200)
committerOndřej Surý <ondrej@isc.org>
Mon, 24 Jul 2023 17:49:14 +0000 (19:49 +0200)
The zone->parentcatz was accessed unlocked in dns_zone_get_parentcatz(),
add a locking around it.

lib/dns/include/dns/zone.h
lib/dns/zone.c

index 933eec608d720db2ff26a6fe9c325b35b4ca7fc6..467dc4007a8a09f9d7c3d167ad51bd41a69babb7 100644 (file)
@@ -2469,7 +2469,7 @@ dns_zone_set_parentcatz(dns_zone_t *zone, dns_catz_zone_t *catz);
  */
 
 dns_catz_zone_t *
-dns_zone_get_parentcatz(const dns_zone_t *zone);
+dns_zone_get_parentcatz(dns_zone_t *zone);
 /*%<
  * Get parent catalog zone for this zone
  *
index 5a52777e73dd9d5d18f5a128b66ddcd794be4b07..8487d367d895c163487bc67d711835fe150d53d6 100644 (file)
@@ -2016,9 +2016,16 @@ dns_zone_set_parentcatz(dns_zone_t *zone, dns_catz_zone_t *catz) {
 }
 
 dns_catz_zone_t *
-dns_zone_get_parentcatz(const dns_zone_t *zone) {
+dns_zone_get_parentcatz(dns_zone_t *zone) {
        REQUIRE(DNS_ZONE_VALID(zone));
-       return (zone->parentcatz);
+
+       dns_catz_zone_t *parentcatz = NULL;
+
+       LOCK_ZONE(zone);
+       parentcatz = zone->parentcatz;
+       UNLOCK_ZONE(zone);
+
+       return (parentcatz);
 }
 
 static bool