All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Duoming Zhou <duoming@zju.edu.cn>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Sasha Levin <sashal@kernel.org>,
	mailhol.vincent@wanadoo.fr, cai.huoqing@linux.dev,
	chi.minghao@zte.com.cn, linux-usb@vger.kernel.org
Subject: [PATCH AUTOSEL 4.14 08/25] drivers: usb: host: Fix deadlock in oxu_bus_suspend()
Date: Tue,  7 Jun 2022 14:02:09 -0400	[thread overview]
Message-ID: <20220607180229.482040-8-sashal@kernel.org> (raw)
In-Reply-To: <20220607180229.482040-1-sashal@kernel.org>

From: Duoming Zhou <duoming@zju.edu.cn>

[ Upstream commit 4d378f2ae58138d4c55684e1d274e7dd94aa6524 ]

There is a deadlock in oxu_bus_suspend(), which is shown below:

   (Thread 1)              |      (Thread 2)
                           | timer_action()
oxu_bus_suspend()          |  mod_timer()
 spin_lock_irq() //(1)     |  (wait a time)
 ...                       | oxu_watchdog()
 del_timer_sync()          |  spin_lock_irq() //(2)
 (wait timer to stop)      |  ...

We hold oxu->lock in position (1) of thread 1, and use
del_timer_sync() to wait timer to stop, but timer handler
also need oxu->lock in position (2) of thread 2. As a result,
oxu_bus_suspend() will block forever.

This patch extracts del_timer_sync() from the protection of
spin_lock_irq(), which could let timer handler to obtain
the needed lock.

Signed-off-by: Duoming Zhou <duoming@zju.edu.cn>
Link: https://lore.kernel.org/r/20220417120305.64577-1-duoming@zju.edu.cn
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/usb/host/oxu210hp-hcd.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/usb/host/oxu210hp-hcd.c b/drivers/usb/host/oxu210hp-hcd.c
index 1d3a79c2eba2..c986dcb7a87c 100644
--- a/drivers/usb/host/oxu210hp-hcd.c
+++ b/drivers/usb/host/oxu210hp-hcd.c
@@ -3489,8 +3489,10 @@ static int oxu_bus_suspend(struct usb_hcd *hcd)
 		}
 	}
 
+	spin_unlock_irq(&oxu->lock);
 	/* turn off now-idle HC */
 	del_timer_sync(&oxu->watchdog);
+	spin_lock_irq(&oxu->lock);
 	ehci_halt(oxu);
 	hcd->state = HC_STATE_SUSPENDED;
 
-- 
2.35.1


  parent reply	other threads:[~2022-06-07 18:48 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-07 18:02 [PATCH AUTOSEL 4.14 01/25] iio: dummy: iio_simple_dummy: check the return value of kstrdup() Sasha Levin
2022-06-07 18:02 ` [PATCH AUTOSEL 4.14 02/25] lkdtm/usercopy: Expand size of "out of frame" object Sasha Levin
2022-06-07 18:02 ` [PATCH AUTOSEL 4.14 03/25] tty: synclink_gt: Fix null-pointer-dereference in slgt_clean() Sasha Levin
2022-06-07 18:02 ` [PATCH AUTOSEL 4.14 04/25] tty: Fix a possible resource leak in icom_probe Sasha Levin
2022-06-07 18:02 ` [PATCH AUTOSEL 4.14 05/25] drivers: staging: rtl8192e: Fix deadlock in rtllib_beacons_stop() Sasha Levin
2022-06-07 18:02 ` [PATCH AUTOSEL 4.14 06/25] USB: host: isp116x: check return value after calling platform_get_resource() Sasha Levin
2022-06-07 18:02 ` [PATCH AUTOSEL 4.14 07/25] drivers: tty: serial: Fix deadlock in sa1100_set_termios() Sasha Levin
2022-06-07 18:02 ` Sasha Levin [this message]
2022-06-07 18:02 ` [PATCH AUTOSEL 4.14 09/25] USB: hcd-pci: Fully suspend across freeze/thaw cycle Sasha Levin
2022-06-07 18:02 ` [PATCH AUTOSEL 4.14 10/25] usb: dwc2: gadget: don't reset gadget's driver->bus Sasha Levin
2022-06-07 18:02 ` [PATCH AUTOSEL 4.14 11/25] misc: rtsx: set NULL intfdata when probe fails Sasha Levin
2022-06-07 18:02 ` [PATCH AUTOSEL 4.14 12/25] extcon: Modify extcon device to be created after driver data is set Sasha Levin
2022-06-07 18:02 ` [PATCH AUTOSEL 4.14 13/25] clocksource/drivers/sp804: Avoid error on multiple instances Sasha Levin
2022-06-07 18:02 ` [PATCH AUTOSEL 4.14 14/25] staging: rtl8712: fix uninit-value in r871xu_drv_init() Sasha Levin
2022-06-07 18:02 ` [PATCH AUTOSEL 4.14 15/25] serial: msm_serial: disable interrupts in __msm_console_write() Sasha Levin
2022-06-07 18:02 ` [PATCH AUTOSEL 4.14 16/25] kernfs: Separate kernfs_pr_cont_buf and rename_lock Sasha Levin
2022-06-07 18:02 ` [dm-devel] [PATCH AUTOSEL 4.14 17/25] md: don't unregister sync_thread with reconfig_mutex held Sasha Levin
2022-06-07 18:02   ` Sasha Levin
2022-06-07 18:02 ` [PATCH AUTOSEL 4.14 18/25] md: protect md_unregister_thread from reentrancy Sasha Levin
2022-06-07 18:02 ` [PATCH AUTOSEL 4.14 19/25] Revert "net: af_key: add check for pfkey_broadcast in function pfkey_process" Sasha Levin
2022-06-07 18:02 ` [PATCH AUTOSEL 4.14 20/25] drm/radeon: fix a possible null pointer dereference Sasha Levin
2022-06-07 18:02   ` Sasha Levin
2022-06-07 18:02   ` Sasha Levin
2022-06-07 18:02 ` [PATCH AUTOSEL 4.14 21/25] modpost: fix undefined behavior of is_arm_mapping_symbol() Sasha Levin
2022-06-07 18:02 ` [PATCH AUTOSEL 4.14 22/25] nbd: call genl_unregister_family() first in nbd_cleanup() Sasha Levin
2022-06-07 18:02 ` [PATCH AUTOSEL 4.14 23/25] nbd: fix race between nbd_alloc_config() and module removal Sasha Levin
2022-06-07 18:02 ` [PATCH AUTOSEL 4.14 24/25] nbd: fix io hung while disconnecting device Sasha Levin
2022-06-07 18:02 ` [PATCH AUTOSEL 4.14 25/25] nodemask: Fix return values to be unsigned Sasha Levin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220607180229.482040-8-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=cai.huoqing@linux.dev \
    --cc=chi.minghao@zte.com.cn \
    --cc=duoming@zju.edu.cn \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=mailhol.vincent@wanadoo.fr \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.