mirror of
https://github.com/nxp-imx/linux-imx.git
synced 2025-07-07 09:55:19 +02:00
wifi: iwlwifi: mvm: drop wrong STA selection in TX
[ Upstream commit 1c7e1068a7
]
This shouldn't happen at all, since in station mode all MMPDUs
go through the TXQ for the STA, and not this function. There
may or may not be a race in mac80211 through which this might
happen for some frames while a station is being added, but in
that case we can also just drop the frame and pretend the STA
didn't exist yet.
Also, the code is simply wrong since it uses deflink, and it's
not easy to fix it since the mvmvif->ap_sta pointer cannot be
used without the mutex, and perhaps the right link might not
even be known.
Just drop the frame at that point instead of trying to fix it
up.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20240808232017.45ad105dc7fe.I6d45c82e5758395d9afb8854057ded03c7dc81d7@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
191e8d5256
commit
d76360adab
|
@ -766,20 +766,10 @@ void iwl_mvm_mac_tx(struct ieee80211_hw *hw,
|
||||||
if (ieee80211_is_mgmt(hdr->frame_control))
|
if (ieee80211_is_mgmt(hdr->frame_control))
|
||||||
sta = NULL;
|
sta = NULL;
|
||||||
|
|
||||||
/* If there is no sta, and it's not offchannel - send through AP */
|
/* this shouldn't even happen: just drop */
|
||||||
if (!sta && info->control.vif->type == NL80211_IFTYPE_STATION &&
|
if (!sta && info->control.vif->type == NL80211_IFTYPE_STATION &&
|
||||||
!offchannel) {
|
!offchannel)
|
||||||
struct iwl_mvm_vif *mvmvif =
|
goto drop;
|
||||||
iwl_mvm_vif_from_mac80211(info->control.vif);
|
|
||||||
u8 ap_sta_id = READ_ONCE(mvmvif->deflink.ap_sta_id);
|
|
||||||
|
|
||||||
if (ap_sta_id < mvm->fw->ucode_capa.num_stations) {
|
|
||||||
/* mac80211 holds rcu read lock */
|
|
||||||
sta = rcu_dereference(mvm->fw_id_to_mac_id[ap_sta_id]);
|
|
||||||
if (IS_ERR_OR_NULL(sta))
|
|
||||||
goto drop;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tmp_sta && !sta && link_id != IEEE80211_LINK_UNSPECIFIED &&
|
if (tmp_sta && !sta && link_id != IEEE80211_LINK_UNSPECIFIED &&
|
||||||
!ieee80211_is_probe_resp(hdr->frame_control)) {
|
!ieee80211_is_probe_resp(hdr->frame_control)) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user