This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: ti-vpe: vpe: fix a v4l2-compliance failure about invalid 
sizeimage
Author:  Benoit Parrot <bpar...@ti.com>
Date:    Mon Oct 7 12:09:59 2019 -0300

v4l2-compliance fails with this message:

   fail: v4l2-test-formats.cpp(463): !pfmt.sizeimage
   fail: v4l2-test-formats.cpp(736): \
        Video Capture Multiplanar is valid, \
        but TRY_FMT failed to return a format
   test VIDIOC_TRY_FMT: FAIL

This failure is causd by the driver failing to handle out range
'bytesperline' values from user space applications.

VPDMA hardware is limited to 64k line stride (16 bytes aligned, so 65520
bytes). So make sure the provided or calculated 'bytesperline' is
smaller than the maximum value.

Signed-off-by: Benoit Parrot <bpar...@ti.com>
Reviewed-by: Tomi Valkeinen <tomi.valkei...@ti.com>
Signed-off-by: Hans Verkuil <hverkuil-ci...@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+sams...@kernel.org>

 drivers/media/platform/ti-vpe/vpdma.h | 1 +
 drivers/media/platform/ti-vpe/vpe.c   | 4 ++++
 2 files changed, 5 insertions(+)

---

diff --git a/drivers/media/platform/ti-vpe/vpdma.h 
b/drivers/media/platform/ti-vpe/vpdma.h
index bce17329c4c9..393fcbb3cb40 100644
--- a/drivers/media/platform/ti-vpe/vpdma.h
+++ b/drivers/media/platform/ti-vpe/vpdma.h
@@ -57,6 +57,7 @@ struct vpdma_data_format {
                                                 * line stride of source and 
dest
                                                 * buffers should be 16 byte 
aligned
                                                 */
+#define VPDMA_MAX_STRIDE               65520   /* Max line stride 16 byte 
aligned */
 #define VPDMA_DTD_DESC_SIZE            32      /* 8 words */
 #define VPDMA_CFD_CTD_DESC_SIZE                16      /* 4 words */
 
diff --git a/drivers/media/platform/ti-vpe/vpe.c 
b/drivers/media/platform/ti-vpe/vpe.c
index 7aa83026fb6c..0a7cf9c820c6 100644
--- a/drivers/media/platform/ti-vpe/vpe.c
+++ b/drivers/media/platform/ti-vpe/vpe.c
@@ -1694,6 +1694,10 @@ static int __vpe_try_fmt(struct vpe_ctx *ctx, struct 
v4l2_format *f,
                if (stride > plane_fmt->bytesperline)
                        plane_fmt->bytesperline = stride;
 
+               plane_fmt->bytesperline = clamp_t(u32, plane_fmt->bytesperline,
+                                                 stride,
+                                                 VPDMA_MAX_STRIDE);
+
                plane_fmt->bytesperline = ALIGN(plane_fmt->bytesperline,
                                                VPDMA_STRIDE_ALIGN);
 

_______________________________________________
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to