diff mbox series

media: fix task hung in vb2_video_unregister_device

Message ID tencent_70C492C20645C99DEEC9EED28C8E27D40606@qq.com (mailing list archive)
State New
Headers show
Series media: fix task hung in vb2_video_unregister_device | expand

Commit Message

Edward Adam Davis Feb. 29, 2024, 12:21 p.m. UTC
vb2_video_unregister_device() will get vb2q_lock, so usbtv_video_free() does
not need vb2q_lock.

Reported-and-tested-by: syzbot+2622b51b35f91a00ea18@syzkaller.appspotmail.com
Signed-off-by: Edward Adam Davis <eadavis@qq.com>
---
 drivers/media/usb/usbtv/usbtv-video.c | 2 --
 1 file changed, 2 deletions(-)

Comments

Hans Verkuil Feb. 29, 2024, 12:36 p.m. UTC | #1
On 2/29/24 13:21, Edward Adam Davis wrote:
> vb2_video_unregister_device() will get vb2q_lock, so usbtv_video_free() does
> not need vb2q_lock.
> 
> Reported-and-tested-by: syzbot+2622b51b35f91a00ea18@syzkaller.appspotmail.com
> Signed-off-by: Edward Adam Davis <eadavis@qq.com>

Duplicate of:

https://lore.kernel.org/linux-media/19cdefd3-163b-41a1-b603-764aab4b5b90@xs4all.nl/

I'm waiting for a v2 of that one.

Regards,

	Hans

> ---
>  drivers/media/usb/usbtv/usbtv-video.c | 2 --
>  1 file changed, 2 deletions(-)
> 
> diff --git a/drivers/media/usb/usbtv/usbtv-video.c b/drivers/media/usb/usbtv/usbtv-video.c
> index 62a583040cd4..b55f432b44d4 100644
> --- a/drivers/media/usb/usbtv/usbtv-video.c
> +++ b/drivers/media/usb/usbtv/usbtv-video.c
> @@ -963,7 +963,6 @@ int usbtv_video_init(struct usbtv *usbtv)
>  
>  void usbtv_video_free(struct usbtv *usbtv)
>  {
> -	mutex_lock(&usbtv->vb2q_lock);
>  	mutex_lock(&usbtv->v4l2_lock);
>  
>  	usbtv_stop(usbtv);
> @@ -971,7 +970,6 @@ void usbtv_video_free(struct usbtv *usbtv)
>  	v4l2_device_disconnect(&usbtv->v4l2_dev);
>  
>  	mutex_unlock(&usbtv->v4l2_lock);
> -	mutex_unlock(&usbtv->vb2q_lock);
>  
>  	v4l2_device_put(&usbtv->v4l2_dev);
>  }
diff mbox series

Patch

diff --git a/drivers/media/usb/usbtv/usbtv-video.c b/drivers/media/usb/usbtv/usbtv-video.c
index 62a583040cd4..b55f432b44d4 100644
--- a/drivers/media/usb/usbtv/usbtv-video.c
+++ b/drivers/media/usb/usbtv/usbtv-video.c
@@ -963,7 +963,6 @@  int usbtv_video_init(struct usbtv *usbtv)
 
 void usbtv_video_free(struct usbtv *usbtv)
 {
-	mutex_lock(&usbtv->vb2q_lock);
 	mutex_lock(&usbtv->v4l2_lock);
 
 	usbtv_stop(usbtv);
@@ -971,7 +970,6 @@  void usbtv_video_free(struct usbtv *usbtv)
 	v4l2_device_disconnect(&usbtv->v4l2_dev);
 
 	mutex_unlock(&usbtv->v4l2_lock);
-	mutex_unlock(&usbtv->vb2q_lock);
 
 	v4l2_device_put(&usbtv->v4l2_dev);
 }