]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Address lock order reversals when shutting down a view.
authorMark Andrews <marka@isc.org>
Mon, 7 Sep 2020 03:21:10 +0000 (13:21 +1000)
committerMark Andrews <marka@isc.org>
Wed, 23 Sep 2020 00:42:26 +0000 (00:42 +0000)
Release view->lock before calling dns_resolver_shutdown,
dns_adb_shutdown, and dns_requestmgr_shutdown.

lib/dns/view.c

index 1726b43f9e307bb4ab0e68ce812104790f23dfae..a7ba613990d69d6f8c095221b6691c931dcc1d1a 100644 (file)
@@ -599,12 +599,21 @@ view_flushanddetach(dns_view_t **viewp, bool flush) {
                dns_zone_t *mkzone = NULL, *rdzone = NULL;
 
                LOCK(&view->lock);
-               if (!RESSHUTDOWN(view))
+               if (!RESSHUTDOWN(view)) {
+                       UNLOCK(&view->lock);
                        dns_resolver_shutdown(view->resolver);
-               if (!ADBSHUTDOWN(view))
+                       LOCK(&view->lock);
+               }
+               if (!ADBSHUTDOWN(view)) {
+                       UNLOCK(&view->lock);
                        dns_adb_shutdown(view->adb);
-               if (!REQSHUTDOWN(view))
+                       LOCK(&view->lock);
+               }
+               if (!REQSHUTDOWN(view)) {
+                       UNLOCK(&view->lock);
                        dns_requestmgr_shutdown(view->requestmgr);
+                       LOCK(&view->lock);
+               }
                if (view->acache != NULL)
                        dns_acache_shutdown(view->acache);
                if (view->zonetable != NULL) {