fix(wifi): allow some special igtk keyindx to workaround faulty APs

pull/12501/merge
muhaidong 2023-11-16 20:20:08 +08:00
rodzic dd5b091a8b
commit 147463a0ac
2 zmienionych plików z 28 dodań i 28 usunięć

@ -1 +1 @@
Subproject commit 6d324abd923bf4895099680956c817e63005ce4f
Subproject commit 9117caad664422522e77a01d65df09ca5b3d24fa

Wyświetl plik

@ -1011,37 +1011,37 @@ int wpa_supplicant_pairwise_gtk(struct wpa_sm *sm,
static int wpa_supplicant_install_igtk(struct wpa_sm *sm,
const wifi_wpa_igtk_t *igtk)
{
size_t len = wpa_cipher_key_len(sm->mgmt_group_cipher);
u16 keyidx = WPA_GET_LE16(igtk->keyid);
size_t len = wpa_cipher_key_len(sm->mgmt_group_cipher);
u16 keyidx = WPA_GET_LE16(igtk->keyid);
/* Detect possible key reinstallation */
if (sm->igtk.igtk_len == len &&
os_memcmp(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len) == 0) {
wpa_printf(MSG_DEBUG,
"WPA: Not reinstalling already in-use IGTK to the driver (keyidx=%d)",
keyidx);
return 0;
}
/* Detect possible key reinstallation */
if (sm->igtk.igtk_len == len &&
os_memcmp(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len) == 0) {
wpa_printf(MSG_DEBUG,
"WPA: Not reinstalling already in-use IGTK to the driver (keyidx=%d)",
keyidx);
return 0;
}
wpa_printf(MSG_DEBUG,
"WPA: IGTK keyid %d pn %02x%02x%02x%02x%02x%02x",
keyidx, MAC2STR(igtk->pn));
wpa_hexdump_key(MSG_DEBUG, "WPA: IGTK", igtk->igtk, len);
if (keyidx > 4095) {
wpa_printf(MSG_WARNING,
"WPA: Invalid IGTK KeyID %d", keyidx);
return -1;
}
if (esp_wifi_set_igtk_internal(WIFI_IF_STA, igtk) < 0) {
wpa_printf(MSG_WARNING,
"WPA: Failed to configure IGTK to the driver");
return -1;
}
wpa_printf(MSG_DEBUG,
"WPA: IGTK keyid %d pn %02x%02x%02x%02x%02x%02x",
keyidx, MAC2STR(igtk->pn));
wpa_hexdump_key(MSG_DEBUG, "WPA: IGTK", igtk->igtk, len);
sm->igtk.igtk_len = len;
os_memcpy(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len);
if (esp_wifi_set_igtk_internal(WIFI_IF_STA, igtk) < 0) {
if (keyidx > 4095) {
wpa_printf(MSG_WARNING,
"WPA: Invalid IGTK KeyID %d", keyidx);
}
wpa_printf(MSG_WARNING,
"WPA: Failed to configure IGTK to the driver");
return -1;
}
return 0;
sm->igtk.igtk_len = len;
os_memcpy(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len);
return 0;
}
#endif /* CONFIG_IEEE80211W */