mesh: Do not use RX MGTK as RX IGTK
authorJouni Malinen <j@w1.fi>
Sat, 18 Jun 2016 12:50:14 +0000 (15:50 +0300)
committerJouni Malinen <j@w1.fi>
Sun, 19 Jun 2016 17:18:09 +0000 (20:18 +0300)
The previous implementation was incorrect in forcing the MGTK to be used
as the IGTK as well. Define new variable for storing IGTK and use that,
if set, to configure IGTK to the driver. This commit does not yet fix
AMPE element parsing to fill in this information.

Signed-off-by: Jouni Malinen <j@w1.fi>
src/ap/sta_info.h
wpa_supplicant/mesh_mpm.c

index b5ed918..2e1e019 100644 (file)
@@ -89,6 +89,8 @@ struct sta_info {
        size_t mtk_len;
        u8 mgtk[WPA_TK_MAX_LEN];
        size_t mgtk_len;
+       u8 igtk[WPA_TK_MAX_LEN];
+       size_t igtk_len;
        u8 sae_auth_retry;
 #endif /* CONFIG_MESH */
 
index 090198d..9829bcc 100644 (file)
@@ -805,9 +805,15 @@ static void mesh_mpm_plink_estab(struct wpa_supplicant *wpa_s,
                wpa_drv_set_key(wpa_s, WPA_ALG_CCMP, sta->addr, 1, 0,
                                seq, sizeof(seq),
                                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));
+
+               if (sta->igtk_len) {
+                       wpa_hexdump_key(MSG_DEBUG, "RX IGTK",
+                                       sta->igtk, sta->igtk_len);
+                       /* FIX: key index.. */
+                       wpa_drv_set_key(wpa_s, WPA_ALG_IGTK, sta->addr, 4, 0,
+                                       seq, sizeof(seq),
+                                       sta->igtk, sta->igtk_len);
+               }
        }
 
        wpa_mesh_set_plink_state(wpa_s, sta, PLINK_ESTAB);