Commit adaad9d8 authored by Vladis Dronov's avatar Vladis Dronov Committed by Willy Tarreau

Input: gtco - fix crash on detecting device without endpoints

commit 162f98de upstream.

The gtco driver expects at least one valid endpoint. If given malicious
descriptors that specify 0 for the number of endpoints, it will crash in
the probe function. Ensure there is at least one endpoint on the interface
before using it.

Also let's fix a minor coding style issue.

The full correct report of this issue can be found in the public
Red Hat Bugzilla:

https://bugzilla.redhat.com/show_bug.cgi?id=1283385Reported-by: default avatarRalf Spenneberg <ralf@spenneberg.net>
Signed-off-by: default avatarVladis Dronov <vdronov@redhat.com>
Cc: stable@vger.kernel.org
Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: default avatarWilly Tarreau <w@1wt.eu>
parent 3af67b1b
...@@ -869,6 +869,14 @@ static int gtco_probe(struct usb_interface *usbinterface, ...@@ -869,6 +869,14 @@ static int gtco_probe(struct usb_interface *usbinterface,
goto err_free_buf; goto err_free_buf;
} }
/* Sanity check that a device has an endpoint */
if (usbinterface->altsetting[0].desc.bNumEndpoints < 1) {
dev_err(&usbinterface->dev,
"Invalid number of endpoints\n");
error = -EINVAL;
goto err_free_urb;
}
/* /*
* The endpoint is always altsetting 0, we know this since we know * The endpoint is always altsetting 0, we know this since we know
* this device only has one interrupt endpoint * this device only has one interrupt endpoint
...@@ -890,7 +898,7 @@ static int gtco_probe(struct usb_interface *usbinterface, ...@@ -890,7 +898,7 @@ static int gtco_probe(struct usb_interface *usbinterface,
* HID report descriptor * HID report descriptor
*/ */
if (usb_get_extra_descriptor(usbinterface->cur_altsetting, if (usb_get_extra_descriptor(usbinterface->cur_altsetting,
HID_DEVICE_TYPE, &hid_desc) != 0){ HID_DEVICE_TYPE, &hid_desc) != 0) {
dev_err(&usbinterface->dev, dev_err(&usbinterface->dev,
"Can't retrieve exta USB descriptor to get hid report descriptor length\n"); "Can't retrieve exta USB descriptor to get hid report descriptor length\n");
error = -EIO; error = -EIO;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment