diff options
Diffstat (limited to 'contrib/wpa/wpa_supplicant/mesh_rsn.c')
-rw-r--r-- | contrib/wpa/wpa_supplicant/mesh_rsn.c | 27 |
1 files changed, 10 insertions, 17 deletions
diff --git a/contrib/wpa/wpa_supplicant/mesh_rsn.c b/contrib/wpa/wpa_supplicant/mesh_rsn.c index 4b8d6c469173..65daa77c2c98 100644 --- a/contrib/wpa/wpa_supplicant/mesh_rsn.c +++ b/contrib/wpa/wpa_supplicant/mesh_rsn.c @@ -100,7 +100,8 @@ static const u8 *auth_get_psk(void *ctx, const u8 *addr, static int auth_set_key(void *ctx, int vlan_id, enum wpa_alg alg, - const u8 *addr, int idx, u8 *key, size_t key_len) + const u8 *addr, int idx, u8 *key, size_t key_len, + enum key_flag key_flag) { struct mesh_rsn *mesh_rsn = ctx; u8 seq[6]; @@ -118,7 +119,7 @@ static int auth_set_key(void *ctx, int vlan_id, enum wpa_alg alg, wpa_hexdump_key(MSG_DEBUG, "AUTH: set_key - key", key, key_len); return wpa_drv_set_key(mesh_rsn->wpa_s, alg, addr, idx, - 1, seq, 6, key, key_len); + 1, seq, 6, key, key_len, key_flag); } @@ -165,11 +166,9 @@ static int __mesh_rsn_auth_init(struct mesh_rsn *rsn, const u8 *addr, conf.wpa_group_rekey = -1; conf.wpa_group_update_count = 4; conf.wpa_pairwise_update_count = 4; -#ifdef CONFIG_IEEE80211W conf.ieee80211w = ieee80211w; if (ieee80211w != NO_MGMT_FRAME_PROTECTION) conf.group_mgmt_cipher = rsn->mgmt_group_cipher; -#endif /* CONFIG_IEEE80211W */ #ifdef CONFIG_OCV conf.ocv = ocv; #endif /* CONFIG_OCV */ @@ -186,7 +185,6 @@ static int __mesh_rsn_auth_init(struct mesh_rsn *rsn, const u8 *addr, return -1; rsn->mgtk_key_id = 1; -#ifdef CONFIG_IEEE80211W if (ieee80211w != NO_MGMT_FRAME_PROTECTION) { rsn->igtk_len = wpa_cipher_key_len(conf.group_mgmt_cipher); if (random_get_bytes(rsn->igtk, rsn->igtk_len) < 0) @@ -197,18 +195,20 @@ static int __mesh_rsn_auth_init(struct mesh_rsn *rsn, const u8 *addr, wpa_hexdump_key(MSG_DEBUG, "mesh: Own TX IGTK", rsn->igtk, rsn->igtk_len); wpa_drv_set_key(rsn->wpa_s, - wpa_cipher_to_alg(rsn->mgmt_group_cipher), NULL, + wpa_cipher_to_alg(rsn->mgmt_group_cipher), + broadcast_ether_addr, rsn->igtk_key_id, 1, - seq, sizeof(seq), rsn->igtk, rsn->igtk_len); + seq, sizeof(seq), rsn->igtk, rsn->igtk_len, + KEY_FLAG_GROUP_TX_DEFAULT); } -#endif /* CONFIG_IEEE80211W */ /* group privacy / data frames */ wpa_hexdump_key(MSG_DEBUG, "mesh: Own TX MGTK", rsn->mgtk, rsn->mgtk_len); - wpa_drv_set_key(rsn->wpa_s, wpa_cipher_to_alg(rsn->group_cipher), NULL, + wpa_drv_set_key(rsn->wpa_s, wpa_cipher_to_alg(rsn->group_cipher), + broadcast_ether_addr, rsn->mgtk_key_id, 1, seq, sizeof(seq), - rsn->mgtk, rsn->mgtk_len); + rsn->mgtk, rsn->mgtk_len, KEY_FLAG_GROUP_TX_DEFAULT); return 0; } @@ -344,7 +344,6 @@ static int mesh_rsn_build_sae_commit(struct wpa_supplicant *wpa_s, } return sae_prepare_commit(wpa_s->own_addr, sta->addr, (u8 *) password, os_strlen(password), - ssid->sae_password_id, sta->sae); } @@ -545,10 +544,8 @@ int mesh_rsn_protect_frame(struct mesh_rsn *rsn, struct sta_info *sta, len = sizeof(*ampe); if (cat[1] == PLINK_OPEN) len += rsn->mgtk_len + WPA_KEY_RSC_LEN + 4; -#ifdef CONFIG_IEEE80211W if (cat[1] == PLINK_OPEN && rsn->igtk_len) len += 2 + 6 + rsn->igtk_len; -#endif /* CONFIG_IEEE80211W */ if (2 + AES_BLOCK_SIZE + 2 + len > wpabuf_tailroom(buf)) { wpa_printf(MSG_ERROR, "protect frame: buffer too small"); @@ -591,7 +588,6 @@ int mesh_rsn_protect_frame(struct mesh_rsn *rsn, struct sta_info *sta, WPA_PUT_LE32(pos, 0xffffffff); pos += 4; -#ifdef CONFIG_IEEE80211W /* * IGTKdata[variable]: * Key ID[2], IPN[6], IGTK[variable] @@ -603,7 +599,6 @@ int mesh_rsn_protect_frame(struct mesh_rsn *rsn, struct sta_info *sta, pos += 6; os_memcpy(pos, rsn->igtk, rsn->igtk_len); } -#endif /* CONFIG_IEEE80211W */ skip_keys: wpa_hexdump_key(MSG_DEBUG, "mesh: Plaintext AMPE element", @@ -774,7 +769,6 @@ int mesh_rsn_process_ampe(struct wpa_supplicant *wpa_s, struct sta_info *sta, WPA_GET_LE32(pos)); pos += 4; -#ifdef CONFIG_IEEE80211W /* * IGTKdata[variable]: * Key ID[2], IPN[6], IGTK[variable] @@ -794,7 +788,6 @@ int mesh_rsn_process_ampe(struct wpa_supplicant *wpa_s, struct sta_info *sta, wpa_hexdump_key(MSG_DEBUG, "mesh: IGTKdata - IGTK", sta->igtk, sta->igtk_len); } -#endif /* CONFIG_IEEE80211W */ free: os_free(crypt); |