]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
media: uvcvideo: Skip parsing frames of type UVC_VS_UNDEFINED in uvc_parse_format
authorBenoit Sevens <bsevens@google.com>
Thu, 7 Nov 2024 14:22:02 +0000 (14:22 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 17 Nov 2024 13:58:07 +0000 (14:58 +0100)
commit ecf2b43018da9579842c774b7f35dbe11b5c38dd upstream.

This can lead to out of bounds writes since frames of this type were not
taken into account when calculating the size of the frames buffer in
uvc_parse_streaming.

Fixes: c0efd232929c ("V4L/DVB (8145a): USB Video Class driver")
Signed-off-by: Benoit Sevens <bsevens@google.com>
Cc: stable@vger.kernel.org
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/media/usb/uvc/uvc_driver.c

index 6367ee9c006699fea3054082bb76b5fcc0e29545..cbad244a307d2bfd7591cace66cdba9b8beec6f3 100644 (file)
@@ -575,7 +575,7 @@ static int uvc_parse_format(struct uvc_device *dev,
        /* Parse the frame descriptors. Only uncompressed, MJPEG and frame
         * based formats have frame descriptors.
         */
-       while (buflen > 2 && buffer[1] == USB_DT_CS_INTERFACE &&
+       while (ftype && buflen > 2 && buffer[1] == USB_DT_CS_INTERFACE &&
               buffer[2] == ftype) {
                frame = &format->frame[format->nframes];
                if (ftype != UVC_VS_FRAME_FRAME_BASED)