Patch "media: hdpvr: initialize dev->worker at hdpvr_register_videodev" has been added to the 5.15-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    media: hdpvr: initialize dev->worker at hdpvr_register_videodev

to the 5.15-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     media-hdpvr-initialize-dev-worker-at-hdpvr_register_.patch
and it can be found in the queue-5.15 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 59e9645ebffd4707cd555f84b6af88166ab3d53d
Author: Dongliang Mu <mudongliangabcd@xxxxxxxxx>
Date:   Fri Feb 18 10:41:30 2022 +0100

    media: hdpvr: initialize dev->worker at hdpvr_register_videodev
    
    [ Upstream commit 07922937e9a580825f9965c46fd15e23ba5754b6 ]
    
    hdpvr_register_videodev is responsible to initialize a worker in
    hdpvr_device. However, the worker is only initialized at
    hdpvr_start_streaming other than hdpvr_register_videodev.
    When hdpvr_probe does not initialize its worker, the hdpvr_disconnect
    will encounter one WARN in flush_work.The stack trace is as follows:
    
     hdpvr_disconnect+0xb8/0xf2 drivers/media/usb/hdpvr/hdpvr-core.c:425
     usb_unbind_interface+0xbf/0x3a0 drivers/usb/core/driver.c:458
     __device_release_driver drivers/base/dd.c:1206 [inline]
     device_release_driver_internal+0x22a/0x230 drivers/base/dd.c:1237
     bus_remove_device+0x108/0x160 drivers/base/bus.c:529
     device_del+0x1fe/0x510 drivers/base/core.c:3592
     usb_disable_device+0xd1/0x1d0 drivers/usb/core/message.c:1419
     usb_disconnect+0x109/0x330 drivers/usb/core/hub.c:2228
    
    Fix this by moving the initialization of dev->worker to the starting of
    hdpvr_register_videodev
    
    Reported-by: syzkaller <syzkaller@xxxxxxxxxxxxxxxx>
    Signed-off-by: Dongliang Mu <mudongliangabcd@xxxxxxxxx>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xxxxxxxxx>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/media/usb/hdpvr/hdpvr-video.c b/drivers/media/usb/hdpvr/hdpvr-video.c
index 563128d11731..60e57e0f1927 100644
--- a/drivers/media/usb/hdpvr/hdpvr-video.c
+++ b/drivers/media/usb/hdpvr/hdpvr-video.c
@@ -308,7 +308,6 @@ static int hdpvr_start_streaming(struct hdpvr_device *dev)
 
 	dev->status = STATUS_STREAMING;
 
-	INIT_WORK(&dev->worker, hdpvr_transmit_buffers);
 	schedule_work(&dev->worker);
 
 	v4l2_dbg(MSG_BUFFER, hdpvr_debug, &dev->v4l2_dev,
@@ -1165,6 +1164,9 @@ int hdpvr_register_videodev(struct hdpvr_device *dev, struct device *parent,
 	bool ac3 = dev->flags & HDPVR_FLAG_AC3_CAP;
 	int res;
 
+	// initialize dev->worker
+	INIT_WORK(&dev->worker, hdpvr_transmit_buffers);
+
 	dev->cur_std = V4L2_STD_525_60;
 	dev->width = 720;
 	dev->height = 480;



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux