]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Missing locks in ns_lwresd_shutdown.
authorMark Andrews <marka@isc.org>
Thu, 27 Aug 2020 04:41:30 +0000 (14:41 +1000)
committerMark Andrews <marka@isc.org>
Mon, 7 Sep 2020 23:25:43 +0000 (09:25 +1000)
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

bin/named/lwresd.c

index 1f834cb38ff7c3c875fb459cb29f7b3534fc5d4a..499314110eb935366336d0106dca49d2e101db17 100644 (file)
@@ -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);
 }