mirror of
https://github.com/torvalds/linux.git
synced 2026-09-26 01:52:03 +02:00
wifi: mac80211: only operate on TDLS peers in the TDLS code
ieee80211_tdls_oper() can operate on the AP station, which then yields various warnings when the AP station is removed then or at a later point in time after being confused for a TDLS peer. Always check that the station is a TDLS peer. Assisted-by: LLM Fixes:dfe018bf99("mac80211: handle TDLS high-level commands and frames") Fixes:17e6a59a36("mac80211: cleanup TDLS state during failed setup") Reported-by: syzbot+a59b5291776979816910@syzkaller.appspotmail.com Closes: https://syzkaller.appspot.com/bug?extid=a59b5291776979816910 Link: https://patch.msgid.link/20260904165722.3bad8b79679b.I99618745e83cbe9b9804179387be15fcd3505ae3@changeid Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
78183e8331
commit
6f0a100df8
|
|
@ -1142,6 +1142,7 @@ ieee80211_tdls_mgmt_setup(struct wiphy *wiphy, struct net_device *dev,
|
|||
struct ieee80211_local *local = sdata->local;
|
||||
enum ieee80211_smps_mode smps_mode =
|
||||
sdata->deflink.u.mgd.driver_smps_mode;
|
||||
struct sta_info *sta;
|
||||
int ret;
|
||||
|
||||
/* don't support setup with forced SMPS mode that's not off */
|
||||
|
|
@ -1168,14 +1169,10 @@ ieee80211_tdls_mgmt_setup(struct wiphy *wiphy, struct net_device *dev,
|
|||
* Allow error packets to be sent - sometimes we don't even add a STA
|
||||
* before failing the setup.
|
||||
*/
|
||||
if (status_code == 0) {
|
||||
rcu_read_lock();
|
||||
if (!sta_info_get(sdata, peer)) {
|
||||
rcu_read_unlock();
|
||||
ret = -ENOLINK;
|
||||
goto out_unlock;
|
||||
}
|
||||
rcu_read_unlock();
|
||||
sta = sta_info_get(sdata, peer);
|
||||
if ((status_code == 0 && !sta) || (sta && !sta->sta.tdls)) {
|
||||
ret = -ENOLINK;
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
ieee80211_flush_queues(local, sdata, false);
|
||||
|
|
@ -1442,6 +1439,10 @@ int ieee80211_tdls_oper(struct wiphy *wiphy, struct net_device *dev,
|
|||
*/
|
||||
tdls_dbg(sdata, "TDLS oper %d peer %pM\n", oper, peer);
|
||||
|
||||
sta = sta_info_get(sdata, peer);
|
||||
if (!sta || !sta->sta.tdls)
|
||||
return -ENOLINK;
|
||||
|
||||
switch (oper) {
|
||||
case NL80211_TDLS_ENABLE_LINK:
|
||||
if (sdata->vif.bss_conf.csa_active) {
|
||||
|
|
@ -1449,10 +1450,6 @@ int ieee80211_tdls_oper(struct wiphy *wiphy, struct net_device *dev,
|
|||
return -EBUSY;
|
||||
}
|
||||
|
||||
sta = sta_info_get(sdata, peer);
|
||||
if (!sta || !sta->sta.tdls)
|
||||
return -ENOLINK;
|
||||
|
||||
iee80211_tdls_recalc_chanctx(sdata, sta);
|
||||
iee80211_tdls_recalc_ht_protection(sdata, sta);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user