diff mbox series

usb: misc: chaoskey: get lock before calling usb_[disable|enable]_autosuspend()

Message ID 20210802222205.GA1389315@pc
State New
Headers show
Series usb: misc: chaoskey: get lock before calling usb_[disable|enable]_autosuspend() | expand

Commit Message

Salah Triki Aug. 2, 2021, 10:22 p.m. UTC
Based on the documentation of usb_[disable|enable]_autosuspend(), the
caller must hold udev's device lock.

Signed-off-by: Salah Triki <salah.triki@gmail.com>
---
 drivers/usb/misc/chaoskey.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Alan Stern Aug. 3, 2021, 12:58 a.m. UTC | #1
On Mon, Aug 02, 2021 at 11:22:05PM +0100, Salah Triki wrote:
> Based on the documentation of usb_[disable|enable]_autosuspend(), the

> caller must hold udev's device lock.

> 

> Signed-off-by: Salah Triki <salah.triki@gmail.com>

> ---

>  drivers/usb/misc/chaoskey.c | 2 ++

>  1 file changed, 2 insertions(+)

> 

> diff --git a/drivers/usb/misc/chaoskey.c b/drivers/usb/misc/chaoskey.c

> index 87067c3d6109..8af00be7b9e8 100644

> --- a/drivers/usb/misc/chaoskey.c

> +++ b/drivers/usb/misc/chaoskey.c

> @@ -206,7 +206,9 @@ static int chaoskey_probe(struct usb_interface *interface,

>  	if (!dev->hwrng_registered)

>  		usb_err(interface, "Unable to register with hwrng");

>  

> +	usb_lock_device(udev);

>  	usb_enable_autosuspend(udev);

> +	usb_unlock_device(udev);


Not needed (indeed, actively harmful).  When this code runs it already 
holds the device lock, because it is part of a probe routine.

Alan Stern
diff mbox series

Patch

diff --git a/drivers/usb/misc/chaoskey.c b/drivers/usb/misc/chaoskey.c
index 87067c3d6109..8af00be7b9e8 100644
--- a/drivers/usb/misc/chaoskey.c
+++ b/drivers/usb/misc/chaoskey.c
@@ -206,7 +206,9 @@  static int chaoskey_probe(struct usb_interface *interface,
 	if (!dev->hwrng_registered)
 		usb_err(interface, "Unable to register with hwrng");
 
+	usb_lock_device(udev);
 	usb_enable_autosuspend(udev);
+	usb_unlock_device(udev);
 
 	usb_dbg(interface, "chaoskey probe success, size %d", dev->size);
 	return 0;