mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-21 16:29:59 +00:00
wifi: mac80211: Check if we had first beacon with relevant links
If there is a disassoc before the fisrt beacon we need to protect a session for the deauth frame. Currently we are checking if we had a beacon in the default link, which is wrong in a MLO connection and link id != 0. Fix this by checking all the active links, if none had a beacon then protect a session. If at least one link had a beacon there is no need for session protection. Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com> Signed-off-by: Gregory Greenman <gregory.greenman@intel.com> Link: https://lore.kernel.org/r/20231004120820.d290f0ab77b0.Ic1505cf3d60f74580d31efa7e52046947c490b85@changeid Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
06d6af4e12
commit
e433304ab4
1 changed files with 14 additions and 3 deletions
|
@ -2936,9 +2936,20 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
|
|||
* deauthentication frame by calling mgd_prepare_tx, if the
|
||||
* driver requested so.
|
||||
*/
|
||||
if (ieee80211_hw_check(&local->hw, DEAUTH_NEED_MGD_TX_PREP) &&
|
||||
!sdata->deflink.u.mgd.have_beacon) {
|
||||
drv_mgd_prepare_tx(sdata->local, sdata, &info);
|
||||
if (ieee80211_hw_check(&local->hw, DEAUTH_NEED_MGD_TX_PREP)) {
|
||||
for (link_id = 0; link_id < ARRAY_SIZE(sdata->link);
|
||||
link_id++) {
|
||||
struct ieee80211_link_data *link;
|
||||
|
||||
link = sdata_dereference(sdata->link[link_id],
|
||||
sdata);
|
||||
if (!link)
|
||||
continue;
|
||||
if (link->u.mgd.have_beacon)
|
||||
break;
|
||||
}
|
||||
if (link_id == IEEE80211_MLD_MAX_NUM_LINKS)
|
||||
drv_mgd_prepare_tx(sdata->local, sdata, &info);
|
||||
}
|
||||
|
||||
ieee80211_send_deauth_disassoc(sdata, sdata->vif.cfg.ap_addr,
|
||||
|
|
Loading…
Reference in a new issue