Since active task's destruction might result in adopting tasks from a
rekeyed ike sa it seems better to first destroy the active task list and
then destroy all queued tasks. This way adoption is possible at all,
while otherwise the queued task list would be empty.
---
 src/libcharon/sa/task_manager.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

Hello *,

searching for a bug we noticed that during destruction of the task_manager
certain tasks in the queue might get lost when queued tasks list is destroyed
before active tasks list is.
I was wondering if there is a particular reason for this behavior? If not
please consider the patch attached for inclusion into the upstream strongswan.

Cheers

Thomas
diff --git a/src/libcharon/sa/task_manager.c b/src/libcharon/sa/task_manager.c
index 473bf34..dad533b 100644
--- a/src/libcharon/sa/task_manager.c
+++ b/src/libcharon/sa/task_manager.c
@@ -159,15 +159,15 @@ struct private_task_manager_t {
  */
 static void flush(private_task_manager_t *this)
 {
-	this->queued_tasks->destroy_offset(this->queued_tasks,
-										offsetof(task_t, destroy));
-	this->queued_tasks = linked_list_create();
 	this->passive_tasks->destroy_offset(this->passive_tasks,
 										offsetof(task_t, destroy));
 	this->passive_tasks = linked_list_create();
 	this->active_tasks->destroy_offset(this->active_tasks,
 										offsetof(task_t, destroy));
 	this->active_tasks = linked_list_create();
+	this->queued_tasks->destroy_offset(this->queued_tasks,
+										offsetof(task_t, destroy));
+	this->queued_tasks = linked_list_create();
 }
 
 /**

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

Reply via email to