]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
media: videobuf2: forbid remove_bufs when legacy fileio is active
authorMarek Szyprowski <m.szyprowski@samsung.com>
Thu, 23 Oct 2025 14:26:34 +0000 (16:26 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Nov 2025 20:34:36 +0000 (15:34 -0500)
commit 27afd6e066cfd80ddbe22a4a11b99174ac89cced upstream.

vb2_ioctl_remove_bufs() call manipulates queue internal buffer list,
potentially overwriting some pointers used by the legacy fileio access
mode. Forbid that ioctl when fileio is active to protect internal queue
state between subsequent read/write calls.

CC: stable@vger.kernel.org
Fixes: a3293a85381e ("media: v4l2: Add REMOVE_BUFS ioctl")
Reported-by: Shuangpeng Bai <SJB7183@psu.edu>
Closes: https://lore.kernel.org/linux-media/5317B590-AAB4-4F17-8EA1-621965886D49@psu.edu/
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/media/common/videobuf2/videobuf2-v4l2.c

index 293f3d5f1c4e98c33e9044d48c97f2ba0cb12170..3d027a9ef10d6a88d4b09b9bf1199e880e1c06e3 100644 (file)
@@ -1015,6 +1015,11 @@ int vb2_ioctl_remove_bufs(struct file *file, void *priv,
        if (vb2_queue_is_busy(vdev->queue, file))
                return -EBUSY;
 
+       if (vb2_fileio_is_active(vdev->queue)) {
+               dprintk(vdev->queue, 1, "file io in progress\n");
+               return -EBUSY;
+       }
+
        return vb2_core_remove_bufs(vdev->queue, d->index, d->count);
 }
 EXPORT_SYMBOL_GPL(vb2_ioctl_remove_bufs);