Skip to content

Commit d16827c

Browse files
mszyprowgregkh
authored andcommitted
wifi: brcmfmac: Fix potential use-after-free issue when stopping watchdog task
commit c623b63 upstream. Watchdog task might end between send_sig() and kthread_stop() calls, what results in the use-after-free issue. Fix this by increasing watchdog task reference count before calling send_sig() and dropping it by switching to kthread_stop_put(). Cc: stable@vger.kernel.org Fixes: 373c83a ("brcmfmac: stop watchdog before detach and free everything") Fixes: a9ffda8 ("brcm80211: fmac: abstract bus_stop interface function pointer") Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com> Link: https://patch.msgid.link/20260416093339.2066829-1-m.szyprowski@samsung.com Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 1e9e55c commit d16827c

1 file changed

Lines changed: 4 additions & 2 deletions

File tree

  • drivers/net/wireless/broadcom/brcm80211/brcmfmac

drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2475,8 +2475,9 @@ static void brcmf_sdio_bus_stop(struct device *dev)
24752475
brcmf_dbg(TRACE, "Enter\n");
24762476

24772477
if (bus->watchdog_tsk) {
2478+
get_task_struct(bus->watchdog_tsk);
24782479
send_sig(SIGTERM, bus->watchdog_tsk, 1);
2479-
kthread_stop(bus->watchdog_tsk);
2480+
kthread_stop_put(bus->watchdog_tsk);
24802481
bus->watchdog_tsk = NULL;
24812482
}
24822483

@@ -4557,8 +4558,9 @@ void brcmf_sdio_remove(struct brcmf_sdio *bus)
45574558
if (bus) {
45584559
/* Stop watchdog task */
45594560
if (bus->watchdog_tsk) {
4561+
get_task_struct(bus->watchdog_tsk);
45604562
send_sig(SIGTERM, bus->watchdog_tsk, 1);
4561-
kthread_stop(bus->watchdog_tsk);
4563+
kthread_stop_put(bus->watchdog_tsk);
45624564
bus->watchdog_tsk = NULL;
45634565
}
45644566

0 commit comments

Comments
 (0)