| From e95adf46e98b312b75ef0a7d7becb5a5da75b222 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 15 Aug 2023 18:41:32 +0200 |
| Subject: wifi: mac80211: check for station first in client probe |
| |
| From: Johannes Berg <johannes.berg@intel.com> |
| |
| [ Upstream commit 67dfa589aa8806c7959cbca2f4613b8d41c75a06 ] |
| |
| When probing a client, first check if we have it, and then |
| check for the channel context, otherwise you can trigger |
| the warning there easily by probing when the AP isn't even |
| started yet. Since a client existing means the AP is also |
| operating, we can then keep the warning. |
| |
| Also simplify the moved code a bit. |
| |
| Reported-by: syzbot+999fac712d84878a7379@syzkaller.appspotmail.com |
| Signed-off-by: Johannes Berg <johannes.berg@intel.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| net/mac80211/cfg.c | 15 ++++++++------- |
| 1 file changed, 8 insertions(+), 7 deletions(-) |
| |
| diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c |
| index 23a44edcb11f7..cf3453b532d67 100644 |
| --- a/net/mac80211/cfg.c |
| +++ b/net/mac80211/cfg.c |
| @@ -3991,19 +3991,20 @@ static int ieee80211_probe_client(struct wiphy *wiphy, struct net_device *dev, |
| mutex_lock(&local->mtx); |
| |
| rcu_read_lock(); |
| + sta = sta_info_get_bss(sdata, peer); |
| + if (!sta) { |
| + ret = -ENOLINK; |
| + goto unlock; |
| + } |
| + |
| + qos = sta->sta.wme; |
| + |
| chanctx_conf = rcu_dereference(sdata->vif.bss_conf.chanctx_conf); |
| if (WARN_ON(!chanctx_conf)) { |
| ret = -EINVAL; |
| goto unlock; |
| } |
| band = chanctx_conf->def.chan->band; |
| - sta = sta_info_get_bss(sdata, peer); |
| - if (sta) { |
| - qos = sta->sta.wme; |
| - } else { |
| - ret = -ENOLINK; |
| - goto unlock; |
| - } |
| |
| if (qos) { |
| fc = cpu_to_le16(IEEE80211_FTYPE_DATA | |
| -- |
| 2.40.1 |
| |