Skip to content

Commit 730cec8

Browse files
bgannedmarion
authored andcommitted
ikev2: fix memory leaks
- make sure everything is freed on cleanup - reuse already allocated vectors where possible Type: fix Change-Id: Ibd8da1edb37126522dc2d525596521d32dceb73a Signed-off-by: Benoît Ganne <bganne@cisco.com>
1 parent 31309fa commit 730cec8

File tree

1 file changed

+20
-7
lines changed

1 file changed

+20
-7
lines changed

src/plugins/ikev2/ikev2.c

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -296,9 +296,12 @@ static void
296296
ikev2_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

Comments
 (0)