ikev2: fix memory leak in child SA 60/23560/4
authorFilip Tehlar <ftehlar@cisco.com>
Wed, 23 Oct 2019 20:39:38 +0000 (20:39 +0000)
committerDamjan Marion <dmarion@me.com>
Wed, 20 Nov 2019 17:36:12 +0000 (17:36 +0000)
traffic selector vector isn't freed when freeing child SA

Type: fix

Change-Id: Icf6c240db5093f45d141451bad6f6627a61821cf
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
src/plugins/ikev2/ikev2.c

index 64d5273..00b8f8e 100644 (file)
@@ -245,19 +245,24 @@ ikev2_sa_free_proposal_vector (ikev2_sa_proposal_t ** v)
   vec_free (*v);
 };
 
+static void
+ikev2_sa_free_child_sa (ikev2_child_sa_t * c)
+{
+  ikev2_sa_free_proposal_vector (&c->r_proposals);
+  ikev2_sa_free_proposal_vector (&c->i_proposals);
+  vec_free (c->sk_ai);
+  vec_free (c->sk_ar);
+  vec_free (c->sk_ei);
+  vec_free (c->sk_er);
+  vec_free (c->tsi);
+  vec_free (c->tsr);
+}
+
 static void
 ikev2_sa_free_all_child_sa (ikev2_child_sa_t ** childs)
 {
   ikev2_child_sa_t *c;
-  vec_foreach (c, *childs)
-  {
-    ikev2_sa_free_proposal_vector (&c->r_proposals);
-    ikev2_sa_free_proposal_vector (&c->i_proposals);
-    vec_free (c->sk_ai);
-    vec_free (c->sk_ar);
-    vec_free (c->sk_ei);
-    vec_free (c->sk_er);
-  }
+  vec_foreach (c, *childs) ikev2_sa_free_child_sa (c);
 
   vec_free (*childs);
 }
@@ -265,13 +270,7 @@ ikev2_sa_free_all_child_sa (ikev2_child_sa_t ** childs)
 static void
 ikev2_sa_del_child_sa (ikev2_sa_t * sa, ikev2_child_sa_t * child)
 {
-  ikev2_sa_free_proposal_vector (&child->r_proposals);
-  ikev2_sa_free_proposal_vector (&child->i_proposals);
-  vec_free (child->sk_ai);
-  vec_free (child->sk_ar);
-  vec_free (child->sk_ei);
-  vec_free (child->sk_er);
-
+  ikev2_sa_free_child_sa (child);
   vec_del1 (sa->childs, child - sa->childs);
 }