Home Home > GIT Browse
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2018-10-10 22:04:15 +0200
committerTakashi Iwai <tiwai@suse.de>2018-10-10 22:05:02 +0200
commitfb6c36ab82d9a845ad1afd72c5401774f67ca3d6 (patch)
treee31f7073515a1ca7b7af14f41bf9d9f3d7d52b83
parentf534b0920d573d2c2c6f8e4f7d933d856ae65980 (diff)
mwifiex: handle race during mwifiex_usb_disconnect
(bsc#1051510).
-rw-r--r--patches.drivers/mwifiex-handle-race-during-mwifiex_usb_disconnect.patch57
-rw-r--r--series.conf1
2 files changed, 58 insertions, 0 deletions
diff --git a/patches.drivers/mwifiex-handle-race-during-mwifiex_usb_disconnect.patch b/patches.drivers/mwifiex-handle-race-during-mwifiex_usb_disconnect.patch
new file mode 100644
index 0000000000..9f3aa1b003
--- /dev/null
+++ b/patches.drivers/mwifiex-handle-race-during-mwifiex_usb_disconnect.patch
@@ -0,0 +1,57 @@
+From f8c095f679625a26efc7bb1b8c4b3c6fcaef4633 Mon Sep 17 00:00:00 2001
+From: Ganapathi Bhat <gbhat@marvell.com>
+Date: Fri, 1 Jun 2018 16:11:20 +0530
+Subject: [PATCH] mwifiex: handle race during mwifiex_usb_disconnect
+Git-commit: f8c095f679625a26efc7bb1b8c4b3c6fcaef4633
+Patch-mainline: v4.18-rc6
+References: bsc#1051510
+
+Race condition is observed during rmmod of mwifiex_usb:
+
+1. The rmmod thread will call mwifiex_usb_disconnect(), download
+ SHUTDOWN command and do wait_event_interruptible_timeout(),
+ waiting for response.
+
+2. The main thread will handle the response and will do a
+ wake_up_interruptible(), unblocking rmmod thread.
+
+3. On getting unblocked, rmmod thread will make rx_cmd.urb = NULL in
+ mwifiex_usb_free().
+
+4. The main thread will try to resubmit rx_cmd.urb in
+ mwifiex_usb_submit_rx_urb(), which is NULL.
+
+To fix this, move mwifiex_usb_free() from mwifiex_usb_disconnect
+to mwifiex_unregister_dev(). Function mwifiex_unregister_dev() is
+called after flushing the command and RX work queues.
+
+Suggested-by: Brian Norris <briannorris@chromium.org>
+Signed-off-by: Ganapathi Bhat <gbhat@marvell.com>
+Reviewed-by: Brian Norris <briannorris@chromium.org>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+Acked-by: Takashi Iwai <tiwai@suse.de>
+
+---
+ drivers/net/wireless/marvell/mwifiex/usb.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/wireless/marvell/mwifiex/usb.c
++++ b/drivers/net/wireless/marvell/mwifiex/usb.c
+@@ -642,8 +642,6 @@ static void mwifiex_usb_disconnect(struc
+ MWIFIEX_FUNC_SHUTDOWN);
+ }
+
+- mwifiex_usb_free(card);
+-
+ mwifiex_dbg(adapter, FATAL,
+ "%s: removing card\n", __func__);
+ mwifiex_remove_card(adapter);
+@@ -992,6 +990,8 @@ static void mwifiex_unregister_dev(struc
+ {
+ struct usb_card_rec *card = (struct usb_card_rec *)adapter->card;
+
++ mwifiex_usb_free(card);
++
+ card->adapter = NULL;
+ }
+
diff --git a/series.conf b/series.conf
index 8af19583c8..655b8a5ad1 100644
--- a/series.conf
+++ b/series.conf
@@ -16817,6 +16817,7 @@
patches.drivers/rtlwifi-Fix-kernel-Oops-Fw-download-fail
patches.drivers/brcmfmac-stop-watchdog-before-detach-and-free-everyt
patches.drivers/Revert-mwifiex-handle-race-during-mwifiex_usb_discon.patch
+ patches.drivers/mwifiex-handle-race-during-mwifiex_usb_disconnect.patch
patches.drivers/rtlwifi-rtl8821ae-fix-firmware-is-not-ready-to-run
patches.drivers/ath10k-update-the-phymode-along-with-bandwidth-chang
patches.suse/gen_stats-Fix-netlink-stats-dumping-in-the-presence-.patch