Merge branch 'bugfix/ft_igtk_installation_v5.3' into 'release/v5.3'

fix(esp_wifi): Correct igtk key installation in ft-psk mode (v5.3)

See merge request espressif/esp-idf!49212
This commit is contained in:
Jiang Jiang Jian
2026-06-04 11:29:19 +08:00
@@ -695,17 +695,31 @@ static int wpa_ft_process_igtk_subelem(struct wpa_sm *sm, const u8 *igtk_elem,
wpa_hexdump_key(MSG_DEBUG, "FT: IGTK from Reassoc Resp", igtk,
WPA_IGTK_LEN);
#ifdef ESP_SUPPLICANT
if (esp_wifi_set_igtk_internal(WIFI_IF_STA, (wifi_wpa_igtk_t *)igtk) < 0) {
#else
keyidx = WPA_GET_LE16(igtk_elem);
if (wpa_sm_set_key(&(sm->install_gtk), WIFI_WPA_ALG_IGTK, sm->bssid, keyidx, 0,
(u8 *)(igtk_elem + 2), 6, igtk, WPA_IGTK_LEN, sm->key_entry_valid) < 0) {
#endif
wifi_wpa_igtk_t igtk_drv;
os_memset(&igtk_drv, 0, sizeof(igtk_drv));
os_memcpy(igtk_drv.keyid, igtk_elem, 2);
os_memcpy(igtk_drv.pn, igtk_elem + 2, 6);
os_memcpy(igtk_drv.igtk, igtk, WPA_IGTK_LEN);
if (esp_wifi_set_igtk_internal(WIFI_IF_STA, &igtk_drv) < 0) {
forced_memzero(&igtk_drv, sizeof(igtk_drv));
forced_memzero(igtk, sizeof(igtk));
wpa_printf(MSG_WARNING, "WPA: Failed to set IGTK to the "
"driver.");
return -1;
}
forced_memzero(&igtk_drv, sizeof(igtk_drv));
#else
keyidx = WPA_GET_LE16(igtk_elem);
if (wpa_sm_set_key(&(sm->install_gtk), WIFI_WPA_ALG_IGTK, sm->bssid, keyidx, 0,
(u8 *)(igtk_elem + 2), 6, igtk, WPA_IGTK_LEN, sm->key_entry_valid) < 0) {
forced_memzero(igtk, sizeof(igtk));
wpa_printf(MSG_WARNING, "WPA: Failed to set IGTK to the "
"driver.");
return -1;
}
#endif
forced_memzero(igtk, sizeof(igtk));
return 0;
}
#endif /* CONFIG_IEEE80211W */