]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
media: vivid: fix wrong pixel_array control size
authorHans Verkuil <hverkuil@xs4all.nl>
Sun, 6 Jul 2025 10:55:40 +0000 (12:55 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 28 Aug 2025 14:31:00 +0000 (16:31 +0200)
commit 3e43442d4994c9e1e202c98129a87e330f7faaed upstream.

The pixel_array control size was calculated incorrectly:
the dimensions were swapped (dims[0] should be the height), and the
values should be the width or height divided by PIXEL_ARRAY_DIV
and rounded up. So don't use roundup, but use DIV_ROUND_UP instead.

This bug is harmless in the sense that nothing will break, except that
it consumes way too much memory for this control.

Fixes: 6bc7643d1b9c ("media: vivid: add pixel_array test control")
Cc: <stable@vger.kernel.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/media/test-drivers/vivid/vivid-ctrls.c
drivers/media/test-drivers/vivid/vivid-vid-cap.c

index 2b5c8fbcd0a27858f84c8e1135aeeac3cb5e2750..3fb4e08ac725ba154979bd233d1e64b4748d23ad 100644 (file)
@@ -243,7 +243,8 @@ static const struct v4l2_ctrl_config vivid_ctrl_u8_pixel_array = {
        .min = 0x00,
        .max = 0xff,
        .step = 1,
-       .dims = { 640 / PIXEL_ARRAY_DIV, 360 / PIXEL_ARRAY_DIV },
+       .dims = { DIV_ROUND_UP(360, PIXEL_ARRAY_DIV),
+                 DIV_ROUND_UP(640, PIXEL_ARRAY_DIV) },
 };
 
 static const struct v4l2_ctrl_config vivid_ctrl_s32_array = {
index 0d5919e0007562cf3983990bd30cc198e8bce0f4..cc84d2671d8407f4ba7b01f90b9af1cc3bbaa481 100644 (file)
@@ -453,8 +453,8 @@ void vivid_update_format_cap(struct vivid_dev *dev, bool keep_controls)
        if (keep_controls)
                return;
 
-       dims[0] = roundup(dev->src_rect.width, PIXEL_ARRAY_DIV);
-       dims[1] = roundup(dev->src_rect.height, PIXEL_ARRAY_DIV);
+       dims[0] = DIV_ROUND_UP(dev->src_rect.height, PIXEL_ARRAY_DIV);
+       dims[1] = DIV_ROUND_UP(dev->src_rect.width, PIXEL_ARRAY_DIV);
        v4l2_ctrl_modify_dimensions(dev->pixel_array, dims);
 }