]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
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 b5ed91801c5a9377de6854c00427f254920b48f7..2e1e019ef234ff5b5393fd73b93a219bcc14b94d 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 090198d48e498ec88bf094686b7a618adb793165..9829bccd0adaa2404994d355bb5e1ace102aeeea 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);