Hello Martin, *,

please consider the attached patch for inclusion into strongswan.
It issues the problem of dangling keymat pointers, once an ike_sa
is reset. You do migrate the active jobs, but if a queued job (like
a create_child job does, for example) aren't reset in this step they
still hold pointers to invalid, hence dangling pointers.

Cheers,

Thomas

---
 src/libcharon/sa/task_manager.c |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/src/libcharon/sa/task_manager.c b/src/libcharon/sa/task_manager.c
index 8857186..568f31a 100644
--- a/src/libcharon/sa/task_manager.c
+++ b/src/libcharon/sa/task_manager.c
@@ -1003,6 +1003,13 @@ METHOD(task_manager_t, reset, void,
        }
        this->initiating.type = EXCHANGE_TYPE_UNDEFINED;

+       /* reset queued tasks */
+       while (this->queued_tasks->remove_last(this->queued_tasks,
+                                                                               
   (void**)&task) == SUCCESS)
+       {
+               task->migrate(task, this->ike_sa);
+               this->queued_tasks->insert_first(this->queued_tasks, task);
+       }
        /* reset active tasks */
        while (this->active_tasks->remove_last(this->active_tasks,
                                                                                
   (void**)&task) == SUCCESS)
-- 
1.7.1


_______________________________________________
Dev mailing list
[email protected]
https://lists.strongswan.org/mailman/listinfo/dev

Reply via email to