Input: xpad - validate USB endpoint type during probe
Subsystems (2)
PATCH 1/1 Input: xpad - validate USB endpoint type during probe
We should only see devices with interrupt endpoints. Ignore any other endpoints that we find, so we don't send try to send them interrupt URBs and trigger a WARN down in the USB stack.
---
To be able to hit any of the LTS kernels, we'll need to also cherry pick c01b5e7464f0 ("Input: xpad - don't depend on endpoint order"). In hindsight, this commit also addresses a malicious USB device case, since a device could purposefully trick us into sending URBs to an endpoint in the wrong direction.
--- drivers/input/joystick/xpad.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
drivers/input/joystick/xpad.c +6 -4
@@ -1764,10 +1764,12 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *idstruct usb_endpoint_descriptor *ep = &intf->cur_altsetting->endpoint[i].desc; -if (usb_endpoint_dir_in (ep)) - ep_irq_in = ep; -else - ep_irq_out = ep; +if (usb_endpoint_xfer_int (ep)) { +if (usb_endpoint_dir_in (ep)) + ep_irq_in = ep; +else + ep_irq_out = ep; + } }if (!ep_irq_in || !ep_irq_out) {
Signature · 1 line
2.14.1
Quoted 9 lines · Cameron Gutman
We should only see devices with interrupt endpoints. Ignore any other endpoints that we find, so we don't send try to send them interrupt URBs and trigger a WARN down in the USB stack.
Reported-by Andrey Konovalov <[email protected]>Tested-by Andrey Konovalov <[email protected]>Cc <[email protected]> # c01b5e7464f0 Input: xpad - don't depend on endpoint orderCc <[email protected]>Signed-off-by Cameron Gutman <[email protected]>
Applied, thank you.
Quoted 32 lines
---
To be able to hit any of the LTS kernels, we'll need to also cherry pickc01b5e7464f0("Input: xpad - don't depend on endpoint order"). In hindsight, this commit also addresses a malicious USB device case, since a device could purposefully trick us into sending URBs to an endpoint in the wrong direction.--- drivers/input/joystick/xpad.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)drivers/input/joystick/xpad.c +6
-4@@ -1764,10 +1764,12 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *idstruct usb_endpoint_descriptor *ep = &intf->cur_altsetting->endpoint[i].desc; -if (usb_endpoint_dir_in (ep)) - ep_irq_in = ep; -else - ep_irq_out = ep; +if (usb_endpoint_xfer_int (ep)) { +if (usb_endpoint_dir_in (ep)) + ep_irq_in = ep; +else + ep_irq_out = ep; + } }if (!ep_irq_in || !ep_irq_out) {Signature · 1 line
2.14.1
Signature · 1 line
Dmitry