media: uvcvideo: Fix invalid pointer in uvc_ctrl_init_ctrl()
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Mon, 18 Jul 2022 12:12:19 +0000 (14:12 +0200)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Wed, 27 Jul 2022 18:25:59 +0000 (20:25 +0200)
The handling of per-device mappings introduced in commit 86f7ef773156
("media: uvcvideo: Add support for per-device control mapping
overrides") overwrote the mapping variable after it was initialized and
before it was used, leading to usage of an invalid pointer for devices
with per-device mappings. Fix it.

Fixes: 86f7ef773156 ("media: uvcvideo: Add support for per-device control mapping overrides")
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/media/usb/uvc/uvc_ctrl.c

index e4826a846861b80ad60efea237c3c997f09d95bb..8c208db9600b46aeaee44d0994e9e8c08d6b9b35 100644 (file)
@@ -2413,9 +2413,8 @@ static void uvc_ctrl_init_ctrl(struct uvc_video_chain *chain,
 {
        const struct uvc_control_info *info = uvc_ctrls;
        const struct uvc_control_info *iend = info + ARRAY_SIZE(uvc_ctrls);
-       const struct uvc_control_mapping *mapping = uvc_ctrl_mappings;
-       const struct uvc_control_mapping *mend =
-               mapping + ARRAY_SIZE(uvc_ctrl_mappings);
+       const struct uvc_control_mapping *mapping;
+       const struct uvc_control_mapping *mend;
 
        /*
         * XU controls initialization requires querying the device for control
@@ -2468,6 +2467,9 @@ static void uvc_ctrl_init_ctrl(struct uvc_video_chain *chain,
        }
 
        /* Process common mappings next. */
+       mapping = uvc_ctrl_mappings;
+       mend = mapping + ARRAY_SIZE(uvc_ctrl_mappings);
+
        for (; mapping < mend; ++mapping) {
                if (uvc_entity_match_guid(ctrl->entity, mapping->entity) &&
                    ctrl->info.selector == mapping->selector)