]> git.ipfire.org Git - thirdparty/kernel/linux.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)
committerHans Verkuil <hverkuil+cisco@kernel.org>
Fri, 24 Oct 2025 09:16:26 +0000 (11:16 +0200)
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>
drivers/media/common/videobuf2/videobuf2-v4l2.c

index d911021c1bb0527777d2da18bef8f0562e32b460..83862d57b126d6495e36f183f215cfc6ee7f6f57 100644 (file)
@@ -1010,6 +1010,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);