---
 src/libcharon/sa/ike_sa.c             |    1 +
 src/libcharon/sa/tasks/child_delete.c |    6 +++---
 src/libcharon/sa/tasks/child_rekey.c  |    1 +
 3 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/libcharon/sa/ike_sa.c b/src/libcharon/sa/ike_sa.c
index 023f074..409bb6e 100644
--- a/src/libcharon/sa/ike_sa.c
+++ b/src/libcharon/sa/ike_sa.c
@@ -1473,6 +1473,7 @@ static child_sa_t* get_child_sa(private_ike_sa_t
*this, protocol_id_t protocol,
                        current->get_protocol(current) == protocol)
                {
                        found = current;
+                       current->get_ref(current);
                }
        }
        iterator->destroy(iterator);
diff --git a/src/libcharon/sa/tasks/child_delete.c
b/src/libcharon/sa/tasks/child_delete.c
index d7c6b05..9a182d7 100644
--- a/src/libcharon/sa/tasks/child_delete.c
+++ b/src/libcharon/sa/tasks/child_delete.c
@@ -295,7 +295,7 @@ static status_t build_i(private_child_delete_t
*this, message_t *message)
 static status_t process_i(private_child_delete_t *this, message_t *message)
 {
        /* flush the list before adding new SAs */
-       this->child_sas->destroy(this->child_sas);
+       this->child_sas->destroy_offset(this->child_sas, offsetof(child_sa_t,
destroy));
        this->child_sas = linked_list_create();

        process_payloads(this, message);
@@ -353,7 +353,7 @@ static void migrate(private_child_delete_t *this,
ike_sa_t *ike_sa)
        this->check_delete_action = FALSE;
        this->ike_sa = ike_sa;

-       this->child_sas->destroy(this->child_sas);
+       this->child_sas->destroy_offset(this->child_sas, offsetof(child_sa_t,
destroy));
        this->child_sas = linked_list_create();
 }

@@ -362,7 +362,7 @@ static void migrate(private_child_delete_t *this,
ike_sa_t *ike_sa)
  */
 static void destroy(private_child_delete_t *this)
 {
-       this->child_sas->destroy(this->child_sas);
+       this->child_sas->destroy_offset(this->child_sas, offsetof(child_sa_t,
destroy));
        free(this);
 }

diff --git a/src/libcharon/sa/tasks/child_rekey.c
b/src/libcharon/sa/tasks/child_rekey.c
index b5e4e84..5e1f515 100644
--- a/src/libcharon/sa/tasks/child_rekey.c
+++ b/src/libcharon/sa/tasks/child_rekey.c
@@ -389,6 +389,7 @@ static void destroy(private_child_rekey_t *this)
                this->child_delete->task.destroy(&this->child_delete->task);
        }
        DESTROY_IF(this->collision);
+       DESTROY_IF(this->child_sa);
        free(this);
 }

-- 
1.7.0.2


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

Reply via email to