| From b00595f3e2403fa47f9fb36b0228c11f5eaf752b Mon Sep 17 00:00:00 2001 |
| From: Cameron Gutman <aicommander@gmail.com> |
| Date: Tue, 12 Sep 2017 11:27:44 -0700 |
| Subject: Input: xpad - validate USB endpoint type during probe |
| |
| [ Upstream commit 122d6a347329818419b032c5a1776e6b3866d9b9 ] |
| |
| 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 <andreyknvl@google.com> |
| Tested-by: Andrey Konovalov <andreyknvl@google.com> |
| Cc: <stable@vger.kernel.org> # c01b5e7464f0 Input: xpad - don't depend on endpoint order |
| Signed-off-by: Cameron Gutman <aicommander@gmail.com> |
| Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/input/joystick/xpad.c | 10 ++++++---- |
| 1 file changed, 6 insertions(+), 4 deletions(-) |
| |
| diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c |
| index f8e34ef643c7..d86e59515b9c 100644 |
| --- a/drivers/input/joystick/xpad.c |
| +++ b/drivers/input/joystick/xpad.c |
| @@ -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) { |
| -- |
| 2.17.1 |
| |