]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
ike-rekey: Correctly destroy colliding rekey task
authorTobias Brunner <tobias@strongswan.org>
Tue, 13 Sep 2022 13:03:24 +0000 (15:03 +0200)
committerTobias Brunner <tobias@strongswan.org>
Thu, 15 Sep 2022 10:16:12 +0000 (12:16 +0200)
Using DESTROY_IF() this way doesn't correctly check if the pointer
is set.

Fixes: 7ffeed01c0d7 ("ike-rekey: Remove collision task type checks")
src/libcharon/sa/ikev2/tasks/ike_rekey.c

index 85c47efc09ccbf209b7a14e2290cab479c09791b..fac008715b936c9291c66912e4063e1373524f6c 100644 (file)
@@ -449,7 +449,10 @@ METHOD(ike_rekey_t, collide, bool,
                                         "ignore");
                                break;
                        }
-                       DESTROY_IF(&this->collision->public.task);
+                       if (this->collision)
+                       {
+                               this->collision->public.task.destroy(&this->collision->public.task);
+                       }
                        this->collision = rekey;
                        return TRUE;
                }
@@ -478,7 +481,10 @@ static void cleanup(private_ike_rekey_t *this)
        cur_sa = charon->bus->get_sa(charon->bus);
        DESTROY_IF(this->new_sa);
        charon->bus->set_sa(charon->bus, cur_sa);
-       DESTROY_IF(&this->collision->public.task);
+       if (this->collision)
+       {
+               this->collision->public.task.destroy(&this->collision->public.task);
+       }
 }
 
 METHOD(task_t, migrate, void,