[PATCH] media: fix task hung in vb2_video_unregister_device

Edward Adam Davis posted 1 patch 1 year, 11 months ago
drivers/media/usb/usbtv/usbtv-video.c | 2 --
1 file changed, 2 deletions(-)
[PATCH] media: fix task hung in vb2_video_unregister_device
Posted by Edward Adam Davis 1 year, 11 months ago
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(-)

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);
 }
-- 
2.43.0
Re: [PATCH] media: fix task hung in vb2_video_unregister_device
Posted by Hans Verkuil 1 year, 11 months ago
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);
>  }