Skip to contentSkip to conversation

Input: xpad - validate USB endpoint type during probe

PATCH Applied Cameron Gutman 2 participants 2 messages Sep 12, 2017

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

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.

Cc <[email protected]> # c01b5e7464f0 Input: xpad - don't depend on endpoint order

---
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
index f8e34ef643c7..d86e59515b9c 100644
@@ -1764,10 +1764,12 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
 		struct 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
maintainer Applied
#1 lore raw
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.

Cc <[email protected]> # c01b5e7464f0 Input: xpad - don't depend on endpoint order

Applied, thank you.

Quoted 32 lines

---
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
index f8e34ef643c7..d86e59515b9c 100644
@@ -1764,10 +1764,12 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
 		struct 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