]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
media: ov519: add missing endpoint sanity checks
authorJohan Hovold <johan@kernel.org>
Fri, 3 Jan 2020 16:35:09 +0000 (17:35 +0100)
committerBen Hutchings <ben@decadent.org.uk>
Tue, 28 Apr 2020 18:03:44 +0000 (19:03 +0100)
commit 998912346c0da53a6dbb71fab3a138586b596b30 upstream.

Make sure to check that we have at least one endpoint before accessing
the endpoint array to avoid dereferencing a NULL-pointer on stream
start.

Note that these sanity checks are not redundant as the driver is mixing
looking up altsettings by index and by number, which need not coincide.

Fixes: 1876bb923c98 ("V4L/DVB (12079): gspca_ov519: add support for the ov511 bridge")
Fixes: b282d87332f5 ("V4L/DVB (12080): gspca_ov519: Fix ov518+ with OV7620AE (Trust spacecam 320)")
Cc: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
drivers/media/usb/gspca/ov519.c

index c95f32a0c02b4283d0f4c66b253e0a7e402f392d..6acb2132aedcc68a93dea02c9a75584dc6babb9f 100644 (file)
@@ -3497,6 +3497,11 @@ static void ov511_mode_init_regs(struct sd *sd)
                return;
        }
 
+       if (alt->desc.bNumEndpoints < 1) {
+               sd->gspca_dev.usb_err = -ENODEV;
+               return;
+       }
+
        packet_size = le16_to_cpu(alt->endpoint[0].desc.wMaxPacketSize);
        reg_w(sd, R51x_FIFO_PSIZE, packet_size >> 5);
 
@@ -3622,6 +3627,11 @@ static void ov518_mode_init_regs(struct sd *sd)
                return;
        }
 
+       if (alt->desc.bNumEndpoints < 1) {
+               sd->gspca_dev.usb_err = -ENODEV;
+               return;
+       }
+
        packet_size = le16_to_cpu(alt->endpoint[0].desc.wMaxPacketSize);
        ov518_reg_w32(sd, R51x_FIFO_PSIZE, packet_size & ~7, 2);