ath10k: fix locking for WEP keys
peer->keys needs to be protected by data_lock since it is also accessed from the WMI path. Both install() and clear() routines for peer keys modify the key contents, so use the data_lock to avoid races. Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
This commit is contained in:
parent
504f6cdf4a
commit
ae1671318e
|
@ -219,6 +219,8 @@ struct ath10k_peer {
|
|||
int vdev_id;
|
||||
u8 addr[ETH_ALEN];
|
||||
DECLARE_BITMAP(peer_ids, ATH10K_MAX_NUM_PEER_IDS);
|
||||
|
||||
/* protected by ar->data_lock */
|
||||
struct ieee80211_key_conf *keys[WMI_MAX_KEY_INDEX + 1];
|
||||
};
|
||||
|
||||
|
|
|
@ -136,7 +136,9 @@ static int ath10k_install_peer_wep_keys(struct ath10k_vif *arvif,
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
spin_lock_bh(&ar->data_lock);
|
||||
peer->keys[i] = arvif->wep_keys[i];
|
||||
spin_unlock_bh(&ar->data_lock);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -173,7 +175,9 @@ static int ath10k_clear_peer_keys(struct ath10k_vif *arvif,
|
|||
ath10k_warn(ar, "failed to remove peer wep key %d: %d\n",
|
||||
i, ret);
|
||||
|
||||
spin_lock_bh(&ar->data_lock);
|
||||
peer->keys[i] = NULL;
|
||||
spin_unlock_bh(&ar->data_lock);
|
||||
}
|
||||
|
||||
return first_errno;
|
||||
|
|
Loading…
Reference in New Issue