]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
lib/isc/task.c: Fix invalid order of DbC checks that could cause dereference before...
authorOndřej Surý <ondrej@sury.org>
Fri, 27 Sep 2019 10:02:41 +0000 (12:02 +0200)
committerOndřej Surý <ondrej@sury.org>
Thu, 3 Oct 2019 07:50:27 +0000 (09:50 +0200)
(cherry picked from commit c662969da190dfa186d9357b2d4454b571c2ed1a)

lib/isc/task.c

index 8d6d409d35caed1483a93d03f46ac999e9ef056a..e823a177f5325c8bd427ba5979caeaf3d2a1ecaf 100644 (file)
@@ -1570,10 +1570,12 @@ isc_taskmgr_excltask(isc_taskmgr_t *mgr0, isc_task_t **taskp) {
 isc_result_t
 isc_task_beginexclusive(isc_task_t *task0) {
        isc__task_t *task = (isc__task_t *)task0;
-       isc__taskmgr_t *manager = task->manager;
+       isc__taskmgr_t *manager;
 
        REQUIRE(VALID_TASK(task));
 
+       manager = task->manager;
+
        REQUIRE(task->state == task_state_running);
 
        LOCK(&manager->excl_lock);
@@ -1602,10 +1604,13 @@ isc_task_beginexclusive(isc_task_t *task0) {
 void
 isc_task_endexclusive(isc_task_t *task0) {
        isc__task_t *task = (isc__task_t *)task0;
-       isc__taskmgr_t *manager = task->manager;
+       isc__taskmgr_t *manager;
 
        REQUIRE(VALID_TASK(task));
        REQUIRE(task->state == task_state_running);
+
+       manager = task->manager;
+
        LOCK(&manager->halt_lock);
        REQUIRE(atomic_load_relaxed(&manager->exclusive_req) == true);
        atomic_store_relaxed(&manager->exclusive_req, false);