From f2456376aeb1458c21de5b7f847b1567475f9cfb Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Tue, 13 Sep 2022 15:03:24 +0200 Subject: [PATCH] ike-rekey: Correctly destroy colliding rekey task 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 | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/libcharon/sa/ikev2/tasks/ike_rekey.c b/src/libcharon/sa/ikev2/tasks/ike_rekey.c index 85c47efc09..fac008715b 100644 --- a/src/libcharon/sa/ikev2/tasks/ike_rekey.c +++ b/src/libcharon/sa/ikev2/tasks/ike_rekey.c @@ -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, -- 2.47.2