]> 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:04:27 +0000 (09:04 +0200)
lib/isc/task.c

index 1c44663f513b4f242da35af1e92f1fc641a4d417..88e5fb1d8307fb2380ec2236a9deefd789ff9ac4 100644 (file)
@@ -1573,10 +1573,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);
@@ -1605,10 +1607,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);