@@ -296,9 +296,12 @@ static void
296296ikev2_sa_free_all_vec (ikev2_sa_t * sa )
297297{
298298 vec_free (sa -> i_nonce );
299- vec_free (sa -> i_dh_data );
299+ vec_free (sa -> r_nonce );
300+
300301 vec_free (sa -> dh_shared_key );
301302 vec_free (sa -> dh_private_key );
303+ vec_free (sa -> i_dh_data );
304+ vec_free (sa -> r_dh_data );
302305
303306 ikev2_sa_free_proposal_vector (& sa -> r_proposals );
304307 ikev2_sa_free_proposal_vector (& sa -> i_proposals );
@@ -312,14 +315,24 @@ ikev2_sa_free_all_vec (ikev2_sa_t * sa)
312315 vec_free (sa -> sk_pr );
313316
314317 vec_free (sa -> i_id .data );
315- vec_free (sa -> i_auth .data );
316318 vec_free (sa -> r_id .data );
319+
320+ vec_free (sa -> i_auth .data );
321+ if (sa -> r_auth .key )
322+ EVP_PKEY_free (sa -> i_auth .key );
317323 vec_free (sa -> r_auth .data );
318324 if (sa -> r_auth .key )
319325 EVP_PKEY_free (sa -> r_auth .key );
320326
321327 vec_free (sa -> del );
322328
329+ vec_free (sa -> rekey );
330+
331+ vec_free (sa -> last_sa_init_req_packet_data );
332+ vec_free (sa -> last_sa_init_res_packet_data );
333+
334+ vec_free (sa -> last_res_packet_data );
335+
323336 ikev2_sa_free_all_child_sa (& sa -> childs );
324337}
325338
@@ -641,7 +654,7 @@ ikev2_process_sa_init_req (vlib_main_t * vm, ikev2_sa_t * sa,
641654 sa -> ispi = clib_net_to_host_u64 (ike -> ispi );
642655
643656 /* store whole IKE payload - needed for PSK auth */
644- vec_free (sa -> last_sa_init_req_packet_data );
657+ vec_reset_length (sa -> last_sa_init_req_packet_data );
645658 vec_add (sa -> last_sa_init_req_packet_data , ike , len );
646659
647660 while (p < len && payload != IKEV2_PAYLOAD_NONE )
@@ -743,7 +756,7 @@ ikev2_process_sa_init_resp (vlib_main_t * vm, ikev2_sa_t * sa,
743756 sa -> raddr .as_u32 );
744757
745758 /* store whole IKE payload - needed for PSK auth */
746- vec_free (sa -> last_sa_init_res_packet_data );
759+ vec_reset_length (sa -> last_sa_init_res_packet_data );
747760 vec_add (sa -> last_sa_init_res_packet_data , ike , len );
748761
749762 while (p < len && payload != IKEV2_PAYLOAD_NONE )
@@ -2323,7 +2336,7 @@ ikev2_generate_message (ikev2_sa_t * sa, ike_header_t * ike, void *user,
23232336 clib_memcpy_fast (ike -> payload , chain -> data , vec_len (chain -> data ));
23242337
23252338 /* store whole IKE payload - needed for PSK auth */
2326- vec_free (sa -> last_sa_init_res_packet_data );
2339+ vec_reset_length (sa -> last_sa_init_res_packet_data );
23272340 vec_add (sa -> last_sa_init_res_packet_data , ike , tlen );
23282341 }
23292342 else
@@ -2372,7 +2385,7 @@ ikev2_generate_message (ikev2_sa_t * sa, ike_header_t * ike, void *user,
23722385 }
23732386
23742387 /* store whole IKE payload - needed for retransmit */
2375- vec_free (sa -> last_res_packet_data );
2388+ vec_reset_length (sa -> last_res_packet_data );
23762389 vec_add (sa -> last_res_packet_data , ike , tlen );
23772390 }
23782391
@@ -3780,7 +3793,7 @@ ikev2_initiate_sa_init (vlib_main_t * vm, u8 * name)
37803793 ike0 -> msgid = 0 ;
37813794
37823795 /* store whole IKE payload - needed for PSK auth */
3783- vec_free (sa .last_sa_init_req_packet_data );
3796+ vec_reset_length (sa .last_sa_init_req_packet_data );
37843797 vec_add (sa .last_sa_init_req_packet_data , ike0 , len );
37853798
37863799 /* add data to the SA then add it to the pool */
0 commit comments