[lvc-project] [PATCH v2] wifi: cfg80211: cancel rfkill_block work in wiphy_unregister()

Fedor Pchelkin pchelkin at ispras.ru
Wed Feb 11 16:27:41 MSK 2026


On Wed, 11. Feb 11:20, Daniil Dulov wrote:
> There is a use-after-free error in cfg80211_shutdown_all_interfaces found
> by syzkaller:
> 
> BUG: KASAN: use-after-free in cfg80211_shutdown_all_interfaces+0x213/0x220
> Read of size 8 at addr ffff888112a78d98 by task kworker/0:5/5326
> CPU: 0 UID: 0 PID: 5326 Comm: kworker/0:5 Not tainted 6.19.0-rc2 #2 PREEMPT(voluntary)
> Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
> Workqueue: events cfg80211_rfkill_block_work
> Call Trace:
>  <TASK>
>  dump_stack_lvl+0x116/0x1f0
>  print_report+0xcd/0x630
>  kasan_report+0xe0/0x110
>  cfg80211_shutdown_all_interfaces+0x213/0x220
>  cfg80211_rfkill_block_work+0x1e/0x30
>  process_one_work+0x9cf/0x1b70
>  worker_thread+0x6c8/0xf10
>  kthread+0x3c5/0x780
>  ret_from_fork+0x56d/0x700
>  ret_from_fork_asm+0x1a/0x30
>  </TASK>
> 
> The problem arises due to the rfkill_block work is not cancelled when wiphy
> is being unregistered. In order to fix the issue cancel the corresponding
> work in wiphy_unregister().
> 
> Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
> 
> Fixes: 1f87f7d3a3b4 ("cfg80211: add rfkill support")
> Cc: stable at vger.kernel.org
> Signed-off-by: Daniil Dulov <d.dulov at aladdin.ru>
> ---
> v2: move cancel_work_sync() from cfg80211_dev_free() to wiphy_unregister()
> as suggested by Johannes Berg <johannes at sipsolutions.net>

Под ветки 5.10 и 6.1 просьба выслать адаптированную версию патча только
в список расслыки lvc-patches, отметив целевые ветки в теме письма.

>  net/wireless/core.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/net/wireless/core.c b/net/wireless/core.c
> index 9a420d627d3c..8628e0eefadc 100644
> --- a/net/wireless/core.c
> +++ b/net/wireless/core.c
> @@ -1214,6 +1214,7 @@ void wiphy_unregister(struct wiphy *wiphy)
>  	/* this has nothing to do now but make sure it's gone */
>  	cancel_work_sync(&rdev->wiphy_work);
>  
> +	cancel_work_sync(&rdev->rfkill_block);
>  	cancel_work_sync(&rdev->conn_work);
>  	flush_work(&rdev->event_work);
>  	cancel_delayed_work_sync(&rdev->dfs_update_channels_wk);
> -- 
> 2.34.1



More information about the lvc-project mailing list