bind/backport-0015-Missing-locks-in-ns_lwresd_shutdown.patch
jiangheng ad37c37958 backport some patches from community
(cherry picked from commit a9fd9ece9b9436b6103d084920c6897ef1adbae6)
2022-09-03 21:36:21 +08:00

47 lines
1.5 KiB
Diff

From 818520216d85c7e86f05de76449782fabaa31fa1 Mon Sep 17 00:00:00 2001
From: Mark Andrews <marka@isc.org>
Date: Thu, 27 Aug 2020 14:41:30 +1000
Subject: [PATCH] Missing locks in ns_lwresd_shutdown.
WARNING: ThreadSanitizer: data race
Read of size 8 at 0x000000000001 by main thread:
#0 ns_lwresd_shutdown bin/named/lwresd.c:885:3
#1 destroy_managers bin/named/./main.c:938:2
#2 cleanup bin/named/./main.c:1346:2
#3 main bin/named/./main.c:1594:2
Previous write of size 8 at 0x000000000001 by thread T1 (mutexes: write M1):
#0 configure_listener bin/named/lwresd.c:768:2
#1 ns_lwresd_configure bin/named/lwresd.c:836:5
#2 load_configuration bin/named/./server.c:8230:2
#3 run_server bin/named/./server.c
#4 dispatch lib/isc/task.c:1157:7
#5 run lib/isc/task.c:1331:2
Conflict: NA
Reference: https://gitlab.isc.org/isc-projects/bind9/-/commit/818520216d85c7e86f05de76449782fabaa31fa1
---
bin/named/lwresd.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/bin/named/lwresd.c b/bin/named/lwresd.c
index 1f834cb38f..499314110e 100644
--- a/bin/named/lwresd.c
+++ b/bin/named/lwresd.c
@@ -880,9 +880,13 @@ ns_lwresd_shutdown(void) {
RUNTIME_CHECK(isc_once_do(&once, initialize_mutex) == ISC_R_SUCCESS);
+ LOCK(&listeners_lock);
while (!ISC_LIST_EMPTY(listeners)) {
listener = ISC_LIST_HEAD(listeners);
ISC_LIST_UNLINK(listeners, listener, link);
+ UNLOCK(&listeners_lock);
ns_lwreslistener_detach(&listener);
+ LOCK(&listeners_lock);
}
+ UNLOCK(&listeners_lock);
}
--
2.23.0