linux-stable/net/mac80211
Emmanuel Grumbach 9ad08fb1bc wifi: mac80211: fix a expired vs. cancel race in roc
When the remain on channel is removed at the time it should
have expired, we have a race: the driver could be handling
the flow of the expiration while mac80211 is cancelling
that very same remain on channel request.

This wouldn't be problem in itself, but since mac80211
can send the next request to the driver in the cancellation
flow, we can get to the following situation:

           CPU0                             CPU1
expiration of roc in driver
ieee80211_remain_on_channel_expired()
                                         Cancellation of the roc
schedules a worker (hw_roc_done)
                                         Add next roc
hw_roc_done_wk runs and ends
the second roc prematurely.

Since, by design, there is only one single request sent to the
driver at a time, we can safely assume that after the cancel()
request returns from the driver, we should not handle any worker
that handles the expiration of the request.

Cancel the hw_roc_done worker after the cancellation to make
sure we start the next one with a clean slate.

Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20230928172905.4e4469be20ac.Iab0525f5cc4698acf23eab98b8b1eec02099cde0@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
2023-10-23 11:45:17 +02:00
..
tests wifi: mac80211: add an element parsing unit test 2023-09-11 12:32:16 +02:00
aead_api.c mac80211: Check crypto_aead_encrypt for errors 2021-03-16 21:20:41 +01:00
aead_api.h
aes_ccm.h
aes_cmac.c mac80211: aes_cmac: check crypto_shash_setkey() return value 2021-04-19 12:01:40 +02:00
aes_cmac.h
aes_gcm.h
aes_gmac.c mac80211: Check crypto_aead_encrypt for errors 2021-03-16 21:20:41 +01:00
aes_gmac.h
agg-rx.c wifi: mac80211: remove ampdu_mlme.mtx 2023-09-11 11:27:22 +02:00
agg-tx.c wifi: mac80211: fix BA session teardown race 2023-09-11 11:27:23 +02:00
airtime.c wifi: mac80211: Sanity check tx bitrate if not provided by driver 2023-09-13 16:24:05 +02:00
cfg.c wifi: mac80211: Rename and update IEEE80211_VIF_DISABLE_SMPS_OVERRIDE 2023-10-23 11:43:27 +02:00
chan.c wifi: mac80211: remove local->mtx 2023-09-11 11:27:22 +02:00
debug.h wifi: mac80211: Add getter functions for vif MLD state 2023-06-14 12:20:08 +02:00
debugfs.c wifi: mac80211: remove sta_mtx 2023-09-11 11:27:22 +02:00
debugfs.h
debugfs_key.c wifi: mac80211: remove key_mtx 2023-09-11 11:27:22 +02:00
debugfs_key.h
debugfs_netdev.c wifi: mac80211: Rename and update IEEE80211_VIF_DISABLE_SMPS_OVERRIDE 2023-10-23 11:43:27 +02:00
debugfs_netdev.h wifi: mac80211: handle debugfs when switching to/from MLO 2023-10-23 11:43:26 +02:00
debugfs_sta.c wifi: mac80211: lock wiphy for aggregation debugfs 2023-09-11 11:27:18 +02:00
debugfs_sta.h wifi: mac80211: add API to show the link STAs in debugfs 2022-10-07 15:23:41 +02:00
driver-ops.c wifi: mac80211: handle debugfs when switching to/from MLO 2023-10-23 11:43:26 +02:00
driver-ops.h wifi: mac80211: make mgd_protect_tdls_discover MLO-aware 2023-10-23 11:45:17 +02:00
drop.h wifi: mac80211: expand __ieee80211_data_to_8023() status 2023-09-26 09:16:47 +02:00
eht.c wifi: mac80211: add helpers to access sband iftype data 2023-06-14 11:57:29 +02:00
ethtool.c wifi: mac80211: ethtool: always hold wiphy mutex 2023-09-25 09:00:39 +02:00
fils_aead.c wifi: mac80211: Do not include crypto/algapi.h 2023-08-24 08:42:36 +02:00
fils_aead.h
he.c wifi: mac80211: add helpers to access sband iftype data 2023-06-14 11:57:29 +02:00
ht.c wifi: mac80211: remove ampdu_mlme.mtx 2023-09-11 11:27:22 +02:00
ibss.c Merge wireless into wireless-next 2023-10-06 17:08:47 +03:00
ieee80211_i.h Merge wireless into wireless-next 2023-10-06 17:08:47 +03:00
iface.c wifi: mac80211: handle debugfs when switching to/from MLO 2023-10-23 11:43:26 +02:00
Kconfig wifi: mac80211: add an element parsing unit test 2023-09-11 12:32:16 +02:00
key.c Merge wireless into wireless-next 2023-10-06 17:08:47 +03:00
key.h wifi: mac80211: remove key_mtx 2023-09-11 11:27:22 +02:00
led.c leds: Change led_trigger_blink[_oneshot]() delay parameters to pass-by-value 2023-05-25 12:16:27 +01:00
led.h leds: Change led_trigger_blink[_oneshot]() delay parameters to pass-by-value 2023-05-25 12:16:27 +01:00
link.c wifi: mac80211: Fix setting vif links 2023-10-23 11:43:28 +02:00
main.c wifi: mac80211: Notify the low level driver on change in MLO valid links 2023-09-25 09:12:33 +02:00
Makefile wifi: mac80211: add an element parsing unit test 2023-09-11 12:32:16 +02:00
mesh.c wifi: mac80211: mesh: fix some kdoc warnings 2023-10-23 11:43:27 +02:00
mesh.h wifi: mac80211: mesh: Remove unused function declaration mesh_ids_set_default() 2023-08-22 21:40:40 +02:00
mesh_hwmp.c wifi: mac80211: mesh: fix some kdoc warnings 2023-10-23 11:43:27 +02:00
mesh_pathtbl.c wifi: mac80211: mesh: fix some kdoc warnings 2023-10-23 11:43:27 +02:00
mesh_plink.c wifi: mac80211: mesh: fix some kdoc warnings 2023-10-23 11:43:27 +02:00
mesh_ps.c wifi: mac80211: mesh: fix some kdoc warnings 2023-10-23 11:43:27 +02:00
mesh_sync.c wifi: mac80211: mesh: fix some kdoc warnings 2023-10-23 11:43:27 +02:00
michael.c
michael.h
mlme.c wifi: mac80211: cleanup auth_data only if association continues 2023-10-23 11:43:26 +02:00
ocb.c wifi: cfg80211: remove scan_width support 2023-09-13 11:10:50 +02:00
offchannel.c wifi: mac80211: fix a expired vs. cancel race in roc 2023-10-23 11:45:17 +02:00
pm.c wifi: mac80211: remove sta_mtx 2023-09-11 11:27:22 +02:00
rate.c wifi: mac80211: make ieee80211_check_rate_mask() link-aware 2022-07-15 11:43:21 +02:00
rate.h wifi: mac80211: make ieee80211_check_rate_mask() link-aware 2022-07-15 11:43:21 +02:00
rc80211_minstrel_ht.c wifi: mac80211: remove shifted rate support 2023-09-13 11:22:16 +02:00
rc80211_minstrel_ht.h wifi: mac80211: minstrel_ht: remove unused has_mrr member from struct minstrel_priv 2022-10-07 15:25:05 +02:00
rc80211_minstrel_ht_debugfs.c mac80211: minstrel_ht: show sampling rates in debugfs 2021-02-12 08:58:11 +01:00
rx.c wifi: mac80211: fix ieee80211_drop_unencrypted_mgmt return type/value 2023-09-29 23:21:15 +02:00
s1g.c wifi: mac80211: remove sta_mtx 2023-09-11 11:27:22 +02:00
scan.c wifi: cfg80211: remove scan_width support 2023-09-13 11:10:50 +02:00
spectmgmt.c wifi: mac80211: use bandwidth indication element for CSA 2023-09-25 09:12:32 +02:00
sta_info.c wifi: mac80211: Sanity check tx bitrate if not provided by driver 2023-09-13 16:24:05 +02:00
sta_info.h wifi: mac80211: fix various kernel-doc issues 2023-09-11 12:32:39 +02:00
status.c wifi: mac80211: remove shifted rate support 2023-09-13 11:22:16 +02:00
tdls.c wifi: mac80211: make mgd_protect_tdls_discover MLO-aware 2023-10-23 11:45:17 +02:00
tkip.c
tkip.h
trace.c
trace.h wifi: mac80211: add support for mld in ieee80211_chswitch_done 2023-09-11 12:31:31 +02:00
trace_msg.h mac80211: tracing: Use the new __vstring() helper 2022-07-24 19:11:17 -04:00
tx.c Merge wireless into wireless-next 2023-10-06 17:08:47 +03:00
util.c wifi: mac80211: add support for parsing TID to Link mapping element 2023-09-25 09:12:34 +02:00
vht.c wifi: mac80211: work around Cisco AP 9115 VHT MPDU length 2023-09-25 08:41:27 +02:00
wep.c wifi: mac80211: remove RX_DROP_UNUSABLE 2023-09-26 09:16:42 +02:00
wep.h
wme.c wifi: mac80211: fix qos on mesh interfaces 2023-03-22 13:46:38 +01:00
wme.h wifi: mac80211: Drop support for TX push path 2022-10-10 11:06:14 +02:00
wpa.c wifi: mac80211: remove RX_DROP_UNUSABLE 2023-09-26 09:16:42 +02:00
wpa.h wifi: mac80211: remove cipher scheme support 2022-06-10 15:35:53 +02:00