Commit e433304a authored by Miri Korenblit's avatar Miri Korenblit Committed by Johannes Berg
Browse files

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: default avatarMiri Korenblit <miriam.rachel.korenblit@intel.com>
Signed-off-by: default avatarGregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20231004120820.d290f0ab77b0.Ic1505cf3d60f74580d31efa7e52046947c490b85@changeid


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 06d6af4e
Loading
Loading
Loading
Loading
+14 −3
Original line number Diff line number Diff line
@@ -2936,8 +2936,19 @@ 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) {
		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);
		}