diff options
author | Wen Gong <wgong@codeaurora.org> | 2019-11-27 03:19:24 +0000 |
---|---|---|
committer | Kalle Valo <kvalo@codeaurora.org> | 2019-11-29 09:43:12 +0200 |
commit | 382e51c139ef9d0b8e65ff5c249771f864b411fd (patch) | |
tree | 1a0630e80203d0470e396a926457f1417cac0602 /drivers/net/wireless/ath/ath10k | |
parent | ath10k: set max mtu to 1500 for sdio chip (diff) | |
download | linux-dev-382e51c139ef9d0b8e65ff5c249771f864b411fd.tar.xz linux-dev-382e51c139ef9d0b8e65ff5c249771f864b411fd.zip |
ath10k: set WMI_PEER_AUTHORIZE after a firmware crash
After the firmware crashes ath10k recovers via ieee80211_reconfig(),
which eventually leads to firmware configuration and including the
encryption keys. However, because there is no new auth/assoc and
4-way-handshake, and firmware set the authorize flag after
4-way-handshake, so the authorize flag in firmware is not set in
firmware without 4-way-handshake. This will lead to a failure of data
transmission after recovery done when using encrypted connections like
WPA-PSK. Set authorize flag after installing keys to firmware will fix
the issue.
This was noticed by testing firmware crashing using simulate_fw_crash
debugfs file.
Tested with QCA6174 SDIO with firmware WLAN.RMH.4.4.1-00007-QCARMSWP-1.
Signed-off-by: Wen Gong <wgong@codeaurora.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless/ath/ath10k')
-rw-r--r-- | drivers/net/wireless/ath/ath10k/mac.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c index 6c6eb9341e6d..767c7bf16975 100644 --- a/drivers/net/wireless/ath/ath10k/mac.c +++ b/drivers/net/wireless/ath/ath10k/mac.c @@ -6329,6 +6329,9 @@ static int ath10k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, if (sta && sta->tdls) ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr, ar->wmi.peer_param->authorize, 1); + else if (sta && cmd == SET_KEY && (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)) + ath10k_wmi_peer_set_param(ar, arvif->vdev_id, peer_addr, + ar->wmi.peer_param->authorize, 1); exit: mutex_unlock(&ar->conf_mutex); |