From: Amitkumar Karwar Date: Thu, 1 Jan 2015 08:13:39 +0000 (-0800) Subject: Bluetooth: btmrvl: fix race issue while stopping main thread X-Git-Tag: v4.0-rc1~133^2~184^2~39 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=8b324fa6915bf4ad7d28e58a5a004f16e470e58d;p=linux-2.6-block.git Bluetooth: btmrvl: fix race issue while stopping main thread btmrvl_remove_card() calls kthread_stop() to stop the main thread, but kthread_should_stop() is checked when all the activities are done in the main thread before sleeping. We will have kthread_should_stop() check as soon as main thread is woken up. This fixes a crash issue caused due to an invalid memory access while unnecessarily processing interrupts after card removal. Signed-off-by: Amitkumar Karwar Signed-off-by: Marcel Holtmann --- diff --git a/drivers/bluetooth/btmrvl_main.c b/drivers/bluetooth/btmrvl_main.c index 30939c993d94..e3f5711c6690 100644 --- a/drivers/bluetooth/btmrvl_main.c +++ b/drivers/bluetooth/btmrvl_main.c @@ -616,6 +616,11 @@ static int btmrvl_service_main_thread(void *data) BT_DBG("main_thread woke up"); + if (kthread_should_stop()) { + BT_DBG("main_thread: break from main thread"); + break; + } + spin_lock_irqsave(&priv->driver_lock, flags); if (adapter->int_count) { adapter->int_count = 0;