From 90bff0e2aa234c62bd216909847cf1d99b9bf1c2 Mon Sep 17 00:00:00 2001 From: Sabrina Dubroca Date: Tue, 19 Jul 2016 11:56:54 +0200 Subject: [PATCH] mka: Avoid inconsistent state in ieee802_1x_kay_move_live_peer() If the memory allocation in ieee802_1x_kay_init_receive_sc() fails, we end up in an inconsistent state where the peer is moved to the live peers list and its sci is setup, but we don't have an rxsc. Signed-off-by: Sabrina Dubroca --- src/pae/ieee802_1x_kay.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/pae/ieee802_1x_kay.c b/src/pae/ieee802_1x_kay.c index d0c3125d4..bb2becd49 100644 --- a/src/pae/ieee802_1x_kay.c +++ b/src/pae/ieee802_1x_kay.c @@ -604,6 +604,11 @@ ieee802_1x_kay_move_live_peer(struct ieee802_1x_mka_participant *participant, break; } + rxsc = ieee802_1x_kay_init_receive_sc(&participant->current_peer_sci, + sc_ch); + if (!rxsc) + return NULL; + os_memcpy(&peer->sci, &participant->current_peer_sci, sizeof(peer->sci)); peer->mn = mn; @@ -620,10 +625,6 @@ ieee802_1x_kay_move_live_peer(struct ieee802_1x_mka_participant *participant, secy_get_available_receive_sc(participant->kay, &sc_ch); - rxsc = ieee802_1x_kay_init_receive_sc(&peer->sci, sc_ch); - if (!rxsc) - return NULL; - dl_list_add(&participant->rxsc_list, &rxsc->list); secy_create_receive_sc(participant->kay, rxsc);