Forwarded: Re: [syzbot] [media?] INFO: trying to register non-static key in __vb2_queue_cancel

From: syzbot

Date: Thu Jul 16 2026 - 07:26:19 EST


For archival purposes, forwarding an incoming command email to
linux-kernel@xxxxxxxxxxxxxxx.

***

Subject: Re: [syzbot] [media?] INFO: trying to register non-static key in __vb2_queue_cancel
Author: gautambhadori9@xxxxxxxxx

#syz test: git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
cc2b5f627e8ccbae1188ef2d8be3e451d7f933a5
diff --git a/drivers/media/usb/em28xx/em28xx-video.c
b/drivers/media/usb/em28xx/em28xx-video.c
index c418add65b..d93f1b5049 100644
--- a/drivers/media/usb/em28xx/em28xx-video.c
+++ b/drivers/media/usb/em28xx/em28xx-video.c
@@ -1410,6 +1410,9 @@ static int em28xx_vb2_setup(struct em28xx *dev)
if (rc < 0)
return rc;

+ if (!em28xx_vbi_supported(dev))
+ return 0;
+
/* Setup Videobuf2 for VBI capture */
q = &v4l2->vb_vbiq;
q->type = V4L2_BUF_TYPE_VBI_CAPTURE;
@@ -2416,7 +2419,7 @@ static int em28xx_v4l2_fini(struct em28xx *dev)
if (video_is_registered(&v4l2->radio_dev)) {
dev_info(&dev->intf->dev, "V4L2 device %s deregistered\n",
video_device_node_name(&v4l2->radio_dev));
- vb2_video_unregister_device(&v4l2->radio_dev);
+ video_unregister_device(&v4l2->radio_dev);
}
if (video_is_registered(&v4l2->vbi_dev)) {
dev_info(&dev->intf->dev, "V4L2 device %s deregistered\n",
@@ -2954,6 +2957,7 @@ static int em28xx_v4l2_init(struct em28xx *dev)
mutex_init(&v4l2->vb_vbi_queue_lock);
v4l2->vdev.queue = &v4l2->vb_vidq;
v4l2->vdev.queue->lock = &v4l2->vb_queue_lock;
+ v4l2->vb_vbiq.lock = &v4l2->vb_vbi_queue_lock;
v4l2->vdev.device_caps = V4L2_CAP_READWRITE | V4L2_CAP_VIDEO_CAPTURE |
V4L2_CAP_STREAMING;
if (dev->int_audio_type != EM28XX_INT_AUDIO_NONE)
@@ -2983,6 +2987,11 @@ static int em28xx_v4l2_init(struct em28xx *dev)
if (dev->chip_id == CHIP_ID_EM2828X || dev->board.decoder == EM28XX_BUILTIN)
v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_ENUM_FRAMESIZES);

+ /* Initialize the queues before registering devices that reference them. */
+ ret = em28xx_vb2_setup(dev);
+ if (ret)
+ goto unregister_dev;
+
/* register v4l2 video video_device */
ret = video_register_device(&v4l2->vdev, VFL_TYPE_VIDEO,
video_nr[dev->devno]);
@@ -3068,9 +3077,6 @@ static int em28xx_v4l2_init(struct em28xx *dev)
/* Save some power by putting tuner to sleep */
v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, standby);

- /* initialize videobuf2 stuff */
- em28xx_vb2_setup(dev);
-
dev_info(&dev->intf->dev,
"V4L2 extension successfully initialized\n");

@@ -3082,7 +3088,7 @@ static int em28xx_v4l2_init(struct em28xx *dev)
dev_info(&dev->intf->dev,
"V4L2 device %s deregistered\n",
video_device_node_name(&v4l2->radio_dev));
- vb2_video_unregister_device(&v4l2->radio_dev);
+ video_unregister_device(&v4l2->radio_dev);
}
if (video_is_registered(&v4l2->vbi_dev)) {
dev_info(&dev->intf->dev,