mka: Avoid inconsistent state in ieee802_1x_kay_move_live_peer()
authorSabrina Dubroca <sd@queasysnail.net>
Tue, 19 Jul 2016 09:56:54 +0000 (11:56 +0200)
committerJouni Malinen <j@w1.fi>
Sun, 7 Aug 2016 08:34:50 +0000 (11:34 +0300)
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 <sd@queasysnail.net>
src/pae/ieee802_1x_kay.c

index d0c3125..bb2becd 100644 (file)
@@ -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);