ikev2: fix leaking pending INIT requests 12/29212/2
authorFilip Tehlar <ftehlar@cisco.com>
Thu, 1 Oct 2020 03:08:52 +0000 (03:08 +0000)
committerBeno�t Ganne <bganne@cisco.com>
Fri, 2 Oct 2020 10:46:12 +0000 (10:46 +0000)
.. when associated profile is deleted.

Type: fix

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

index 63e89b5..bc37b7e 100644 (file)
@@ -3471,6 +3471,22 @@ ikev2_cleanup_profile_sessions (ikev2_main_t * km, ikev2_profile_t * p)
   u32 *sai;
   u32 *del_sai = 0;
 
+  /* *INDENT-OFF* */
+  pool_foreach(sa, km->sais, ({
+    if (pi == sa->profile_index)
+      vec_add1 (del_sai, sa - km->sais);
+  }));
+  /* *INDENT-ON* */
+
+  vec_foreach (sai, del_sai)
+  {
+    sa = pool_elt_at_index (km->sais, sai[0]);
+    ikev2_sa_free_all_vec (sa);
+    hash_unset (km->sa_by_ispi, sa->ispi);
+    pool_put (km->sais, sa);
+  }
+  vec_reset_length (del_sai);
+
   vec_foreach (tkm, km->per_thread_data)
   {
     /* *INDENT-OFF* */