]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
media: flexcop-usb: fix endpoint sanity check
authorJohan Hovold <johan@kernel.org>
Fri, 3 Jan 2020 16:35:08 +0000 (17:35 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 1 Apr 2020 09:00:23 +0000 (11:00 +0200)
commit bca243b1ce0e46be26f7c63b5591dfbb41f558e5 upstream.

commit 1b976fc6d684 ("media: b2c2-flexcop-usb: add sanity checking") added
an endpoint sanity check to address a NULL-pointer dereference on probe.
Unfortunately the check was done on the current altsetting which was later
changed.

Fix this by moving the sanity check to after the altsetting is changed.

Fixes: 1b976fc6d684 ("media: b2c2-flexcop-usb: add sanity checking")
Cc: Oliver Neukum <oneukum@suse.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/media/usb/b2c2/flexcop-usb.c

index 039963a7765b00c5d27bd2f9a85be3b64b238606..198ddfb8d2b18e1fa12b22afdae24add748032b3 100644 (file)
@@ -511,6 +511,9 @@ static int flexcop_usb_init(struct flexcop_usb *fc_usb)
                return ret;
        }
 
+       if (fc_usb->uintf->cur_altsetting->desc.bNumEndpoints < 1)
+               return -ENODEV;
+
        switch (fc_usb->udev->speed) {
        case USB_SPEED_LOW:
                err("cannot handle USB speed because it is too slow.");
@@ -544,9 +547,6 @@ static int flexcop_usb_probe(struct usb_interface *intf,
        struct flexcop_device *fc = NULL;
        int ret;
 
-       if (intf->cur_altsetting->desc.bNumEndpoints < 1)
-               return -ENODEV;
-
        if ((fc = flexcop_device_kmalloc(sizeof(struct flexcop_usb))) == NULL) {
                err("out of memory\n");
                return -ENOMEM;