]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
PeerKey: Fix STK 4-way handshake regression
authorJouni Malinen <j@w1.fi>
Sun, 18 Dec 2016 17:56:05 +0000 (19:56 +0200)
committerJouni Malinen <j@w1.fi>
Sun, 18 Dec 2016 17:56:05 +0000 (19:56 +0200)
Commit c93b7e18885b07bf198e230019185b50ed622d9f ('RSN: Check result of
EAPOL-Key frame send request') forgot to update two PeerKey users of
EAPOL-Key TX functions. That resulted in STK handshake failing since
message 2/4 and 4/4 TX calls were assumed to have failed when the return
value was changed from 0 to a positive value for success case. This
resulted in not updating nonce information properly and hitting
following error when processing STK 4-way handshake message 3/4:

RSN: INonce from message 1 of STK 4-Way Handshake differs from 3 of STK
4-Way Handshake - drop packet (src=<addr>)

Signed-off-by: Jouni Malinen <j@w1.fi>
src/rsn_supp/peerkey.c

index eb513554270895e93af6301f4871e0788167352a..ce338f8fd9214179e37c7cee6035dbbe2ff1709f 100644 (file)
@@ -715,7 +715,8 @@ static void wpa_supplicant_process_stk_1_of_4(struct wpa_sm *sm,
 
        if (wpa_supplicant_send_2_of_4(sm, peerkey->addr, key, ver,
                                       peerkey->pnonce, kde_buf, kde_buf_len,
-                                      stk)) {
+                                      stk) < 0) {
+               wpa_printf(MSG_INFO, "RSN: Failed to send STK message 2/4");
                os_free(kde_buf);
                return;
        }
@@ -854,8 +855,10 @@ static void wpa_supplicant_process_stk_3_of_4(struct wpa_sm *sm,
 
        if (wpa_supplicant_send_4_of_4(sm, peerkey->addr, key, ver,
                                       WPA_GET_BE16(key->key_info),
-                                      &peerkey->stk))
+                                      &peerkey->stk) < 0) {
+               wpa_printf(MSG_INFO, "RSN: Failed to send STK message 4/4");
                return;
+       }
 
        _key = peerkey->stk.tk;
        if (peerkey->cipher == WPA_CIPHER_TKIP) {