On Mon Apr 28 20:16:50 2025 +0200, Ludwig Disterhof wrote:
> When an program is streaming (ffplay) and another program (qv4l2)
> changes the TV standard from NTSC to PAL, the kernel crashes due to trying
> to copy to unmapped memory.
> 
> Changing from NTSC to PAL increases the resolution in the usbtv struct,
> but the video plane buffer isn't adjusted, so it overflows.
> 
> Fixes: 0e0fe3958fdd13d ("[media] usbtv: Add support for PAL video source")
> Cc: [email protected]
> Signed-off-by: Ludwig Disterhof <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>
> [hverkuil: call vb2_is_busy instead of vb2_is_streaming]

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/usb/usbtv/usbtv-video.c | 4 ++++
 1 file changed, 4 insertions(+)

---

diff --git a/drivers/media/usb/usbtv/usbtv-video.c 
b/drivers/media/usb/usbtv/usbtv-video.c
index be22a9697197..de0328100a60 100644
--- a/drivers/media/usb/usbtv/usbtv-video.c
+++ b/drivers/media/usb/usbtv/usbtv-video.c
@@ -73,6 +73,10 @@ static int usbtv_configure_for_norm(struct usbtv *usbtv, 
v4l2_std_id norm)
        }
 
        if (params) {
+               if (vb2_is_busy(&usbtv->vb2q) &&
+                   (usbtv->width != params->cap_width ||
+                    usbtv->height != params->cap_height))
+                       return -EBUSY;
                usbtv->width = params->cap_width;
                usbtv->height = params->cap_height;
                usbtv->n_chunks = usbtv->width * usbtv->height

Reply via email to