]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Lock the address entry bucket when dumping ADB namehook
authorEvan Hunt <each@isc.org>
Thu, 11 Aug 2022 22:06:34 +0000 (15:06 -0700)
committerEvan Hunt <each@isc.org>
Fri, 12 Aug 2022 22:55:41 +0000 (15:55 -0700)
When dumping an ADB address entry associated with a name,
the name bucket lock was held, but the entry bucket lock was
not; this could cause data races when other threads were updating
address entry info. (These races are probably not operationally
harmful, but they triggered TSAN error reports.)

lib/dns/adb.c

index 209870c17084024850bbfccee1432084197078c5..28c61de5e0b871a51baa1d5dff32bfb8ee93313f 100644 (file)
@@ -3620,7 +3620,13 @@ print_namehook_list(FILE *f, const char *legend, dns_adb_t *adb,
                if (debug) {
                        fprintf(f, ";\tHook(%s) %p\n", legend, nh);
                }
+#ifdef __SANITIZE_THREAD__
+               LOCK(&adb->entrylocks[nh->entry->lock_bucket]);
+#endif
                dump_entry(f, adb, nh->entry, debug, now);
+#ifdef __SANITIZE_THREAD__
+               UNLOCK(&adb->entrylocks[nh->entry->lock_bucket]);
+#endif
        }
 }