Merge branch 'bugfix/fix_send_eapol_key_request_frame_when_wpa_group_handshake_issue_v4.2' into 'release/v4.2'

wpa_supplicant: try install gtk before send group key handshake message 2(Backport v4.2)

See merge request espressif/esp-idf!20199
This commit is contained in:
Jiang Jiang Jian
2022-09-28 17:50:35 +08:00

View File

@@ -1551,20 +1551,7 @@ failed:
wpa_sm_set_seq(sm, key, 0); wpa_sm_set_seq(sm, key, 0);
sm->key_info=key_info; sm->key_info=key_info;
if (wpa_supplicant_send_2_of_2(sm, key, ver, key_info)) /*install gtk before send 2 of 2*/
goto failed;
return;
failed:
wpa_sm_deauthenticate(sm, WLAN_REASON_UNSPECIFIED);
}
int wpa_supplicant_send_2_of_2_txcallback(struct wpa_sm *sm)
{
u16 key_info=sm->key_info;
u16 rekey= (WPA_SM_STATE(sm) == WPA_COMPLETED);
if((sm->gd).gtk_len) { if((sm->gd).gtk_len) {
if (wpa_supplicant_install_gtk(sm, &(sm->gd))) if (wpa_supplicant_install_gtk(sm, &(sm->gd)))
goto failed; goto failed;
@@ -1572,7 +1559,10 @@ failed:
goto failed; goto failed;
} }
if (rekey) { if (wpa_supplicant_send_2_of_2(sm, key, ver, key_info))
goto failed;
if ((WPA_SM_STATE(sm) == WPA_COMPLETED)) {
#ifdef MSG_PRINT #ifdef MSG_PRINT
wpa_printf(MSG_DEBUG, "WPA: Group rekeying " wpa_printf(MSG_DEBUG, "WPA: Group rekeying "
"completed with " MACSTR " [GTK=%s]", "completed with " MACSTR " [GTK=%s]",
@@ -1580,13 +1570,15 @@ failed:
#endif #endif
wpa_sm_cancel_auth_timeout(sm); wpa_sm_cancel_auth_timeout(sm);
wpa_sm_set_state(WPA_COMPLETED); wpa_sm_set_state(WPA_COMPLETED);
} else } else {
wpa_supplicant_key_neg_complete(sm, sm->bssid, wpa_supplicant_key_neg_complete(sm, sm->bssid,
key_info &WPA_KEY_INFO_SECURE); sm->key_info &WPA_KEY_INFO_SECURE);
return 0; }
return;
failed: failed:
return WLAN_REASON_UNSPECIFIED; wpa_sm_deauthenticate(sm, WLAN_REASON_UNSPECIFIED);
} }
int wpa_supplicant_verify_eapol_key_mic(struct wpa_sm *sm, int wpa_supplicant_verify_eapol_key_mic(struct wpa_sm *sm,
@@ -2395,7 +2387,6 @@ void eapol_txcb(void *eb)
case WPA_GROUP_HANDSHAKE: case WPA_GROUP_HANDSHAKE:
if (sm->txcb_flags & WPA_GROUP_HANDSHAKE_BIT) { if (sm->txcb_flags & WPA_GROUP_HANDSHAKE_BIT) {
sm->txcb_flags &= ~WPA_GROUP_HANDSHAKE_BIT; sm->txcb_flags &= ~WPA_GROUP_HANDSHAKE_BIT;
isdeauth = wpa_supplicant_send_2_of_2_txcallback(sm);
} else { } else {
wpa_printf(MSG_DEBUG, "2/2 txcb, flags=%d\n", sm->txcb_flags); wpa_printf(MSG_DEBUG, "2/2 txcb, flags=%d\n", sm->txcb_flags);
} }