From: Mark Andrews Date: Thu, 27 Aug 2020 04:41:30 +0000 (+1000) Subject: Missing locks in ns_lwresd_shutdown. X-Git-Tag: v9.11.24~30^2~14 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=818520216d85c7e86f05de76449782fabaa31fa1;p=thirdparty%2Fbind9.git 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 --- diff --git a/bin/named/lwresd.c b/bin/named/lwresd.c index 1f834cb38ff..499314110eb 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); }