Commit 151411e8 authored by Jouni Malinen's avatar Jouni Malinen Committed by Kalle Valo

ath6kl: Fix static WEP configuration in AP mode

Configuration of the WEP keys needs to be delayed until the AP mode has
been properly started at the target. Partial support for delaying the
WEP key configuration was already in place in the driver, but the actual
part of deciding when to do this was missing.
Signed-off-by: default avatarJouni Malinen <jouni@qca.qualcomm.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent 170826dd
...@@ -904,6 +904,20 @@ static int ath6kl_cfg80211_add_key(struct wiphy *wiphy, struct net_device *ndev, ...@@ -904,6 +904,20 @@ static int ath6kl_cfg80211_add_key(struct wiphy *wiphy, struct net_device *ndev,
} }
} }
if (ar->next_mode == AP_NETWORK && key_type == WEP_CRYPT &&
!test_bit(CONNECTED, &ar->flag)) {
/*
* Store the key locally so that it can be re-configured after
* the AP mode has properly started
* (ath6kl_install_statioc_wep_keys).
*/
ath6kl_dbg(ATH6KL_DBG_WLAN_CFG, "Delay WEP key configuration "
"until AP mode has been started\n");
ar->wep_key_list[key_index].key_len = key->key_len;
memcpy(ar->wep_key_list[key_index].key, key->key, key->key_len);
return 0;
}
status = ath6kl_wmi_addkey_cmd(ar->wmi, ar->def_txkey_index, status = ath6kl_wmi_addkey_cmd(ar->wmi, ar->def_txkey_index,
key_type, key_usage, key->key_len, key_type, key_usage, key->key_len,
key->seq, key->key, KEY_OP_INIT_VAL, key->seq, key->key, KEY_OP_INIT_VAL,
...@@ -1018,7 +1032,7 @@ static int ath6kl_cfg80211_set_default_key(struct wiphy *wiphy, ...@@ -1018,7 +1032,7 @@ static int ath6kl_cfg80211_set_default_key(struct wiphy *wiphy,
if (multicast) if (multicast)
key_type = ar->grp_crypto; key_type = ar->grp_crypto;
if (ar->nw_type == AP_NETWORK && !test_bit(CONNECTED, &ar->flag)) if (ar->next_mode == AP_NETWORK && !test_bit(CONNECTED, &ar->flag))
return 0; /* Delay until AP mode has been started */ return 0; /* Delay until AP mode has been started */
status = ath6kl_wmi_addkey_cmd(ar->wmi, ar->def_txkey_index, status = ath6kl_wmi_addkey_cmd(ar->wmi, ar->def_txkey_index,
......
...@@ -1364,8 +1364,10 @@ void ath6kl_disconnect_event(struct ath6kl *ar, u8 reason, u8 *bssid, ...@@ -1364,8 +1364,10 @@ void ath6kl_disconnect_event(struct ath6kl *ar, u8 reason, u8 *bssid,
cfg80211_del_sta(ar->net_dev, bssid, GFP_KERNEL); cfg80211_del_sta(ar->net_dev, bssid, GFP_KERNEL);
} }
if (memcmp(ar->net_dev->dev_addr, bssid, ETH_ALEN) == 0) if (memcmp(ar->net_dev->dev_addr, bssid, ETH_ALEN) == 0) {
memset(ar->wep_key_list, 0, sizeof(ar->wep_key_list));
clear_bit(CONNECTED, &ar->flag); clear_bit(CONNECTED, &ar->flag);
}
return; return;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment