diff --git a/src/ap/sta_info.h b/src/ap/sta_info.h index 6b520bc2a..b5ed91801 100644 --- a/src/ap/sta_info.h +++ b/src/ap/sta_info.h @@ -87,7 +87,8 @@ struct sta_info { u8 aek[32]; /* SHA256 digest length */ u8 mtk[WPA_TK_MAX_LEN]; size_t mtk_len; - u8 mgtk[16]; + u8 mgtk[WPA_TK_MAX_LEN]; + size_t mgtk_len; u8 sae_auth_retry; #endif /* CONFIG_MESH */ diff --git a/wpa_supplicant/mesh_mpm.c b/wpa_supplicant/mesh_mpm.c index 84c5b6b36..090198d48 100644 --- a/wpa_supplicant/mesh_mpm.c +++ b/wpa_supplicant/mesh_mpm.c @@ -797,15 +797,17 @@ static void mesh_mpm_plink_estab(struct wpa_supplicant *wpa_s, /* TODO: support for other ciphers */ wpa_drv_set_key(wpa_s, WPA_ALG_CCMP, sta->addr, 0, 0, seq, sizeof(seq), sta->mtk, sta->mtk_len); + + wpa_hexdump_key(MSG_DEBUG, "mesh: RX MGTK", + sta->mgtk, sta->mgtk_len); + /* TODO: support for other ciphers */ + /* FIX: key index.. */ wpa_drv_set_key(wpa_s, WPA_ALG_CCMP, sta->addr, 1, 0, seq, sizeof(seq), - sta->mgtk, sizeof(sta->mgtk)); + sta->mgtk, sta->mgtk_len); wpa_drv_set_key(wpa_s, WPA_ALG_IGTK, sta->addr, 4, 0, seq, sizeof(seq), sta->mgtk, sizeof(sta->mgtk)); - - wpa_hexdump_key(MSG_DEBUG, "mgtk:", - sta->mgtk, sizeof(sta->mgtk)); } wpa_mesh_set_plink_state(wpa_s, sta, PLINK_ESTAB); diff --git a/wpa_supplicant/mesh_rsn.c b/wpa_supplicant/mesh_rsn.c index 0fa0fbf33..db2a60800 100644 --- a/wpa_supplicant/mesh_rsn.c +++ b/wpa_supplicant/mesh_rsn.c @@ -640,6 +640,7 @@ int mesh_rsn_process_ampe(struct wpa_supplicant *wpa_s, struct sta_info *sta, os_memcpy(sta->peer_nonce, ampe->local_nonce, sizeof(ampe->local_nonce)); os_memcpy(sta->mgtk, ampe->mgtk, sizeof(ampe->mgtk)); + sta->mgtk_len = sizeof(ampe->mgtk); /* todo parse mgtk expiration */ free: