aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/ap/sta_info.h3
-rw-r--r--wpa_supplicant/mesh_mpm.c10
-rw-r--r--wpa_supplicant/mesh_rsn.c1
3 files changed, 9 insertions, 5 deletions
diff --git a/src/ap/sta_info.h b/src/ap/sta_info.h
index 6b520bc..b5ed918 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 84c5b6b..090198d 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 0fa0fbf..db2a608 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: