Skip to content

Commit 5600f69

Browse files
pskrgagdtor
authored andcommitted
Input: aiptek - properly check endpoint type
Syzbot reported warning in usb_submit_urb() which is caused by wrong endpoint type. There was a check for the number of endpoints, but not for the type of endpoint. Fix it by replacing old desc.bNumEndpoints check with usb_find_common_endpoints() helper for finding endpoints Fail log: usb 5-1: BOGUS urb xfer, pipe 1 != type 3 WARNING: CPU: 2 PID: 48 at drivers/usb/core/urb.c:502 usb_submit_urb+0xed2/0x18a0 drivers/usb/core/urb.c:502 Modules linked in: CPU: 2 PID: 48 Comm: kworker/2:2 Not tainted 5.17.0-rc6-syzkaller-00226-g07ebd38a0da2 #0 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.14.0-2 04/01/2014 Workqueue: usb_hub_wq hub_event ... Call Trace: <TASK> aiptek_open+0xd5/0x130 drivers/input/tablet/aiptek.c:830 input_open_device+0x1bb/0x320 drivers/input/input.c:629 kbd_connect+0xfe/0x160 drivers/tty/vt/keyboard.c:1593 Fixes: 8e20cf2 ("Input: aiptek - fix crash on detecting device without endpoints") Reported-and-tested-by: [email protected] Signed-off-by: Pavel Skripkin <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Dmitry Torokhov <[email protected]>
1 parent e941dc1 commit 5600f69

File tree

1 file changed

+4
-6
lines changed

1 file changed

+4
-6
lines changed

drivers/input/tablet/aiptek.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1787,15 +1787,13 @@ aiptek_probe(struct usb_interface *intf, const struct usb_device_id *id)
17871787
input_set_abs_params(inputdev, ABS_TILT_Y, AIPTEK_TILT_MIN, AIPTEK_TILT_MAX, 0, 0);
17881788
input_set_abs_params(inputdev, ABS_WHEEL, AIPTEK_WHEEL_MIN, AIPTEK_WHEEL_MAX - 1, 0, 0);
17891789

1790-
/* Verify that a device really has an endpoint */
1791-
if (intf->cur_altsetting->desc.bNumEndpoints < 1) {
1790+
err = usb_find_common_endpoints(intf->cur_altsetting,
1791+
NULL, NULL, &endpoint, NULL);
1792+
if (err) {
17921793
dev_err(&intf->dev,
1793-
"interface has %d endpoints, but must have minimum 1\n",
1794-
intf->cur_altsetting->desc.bNumEndpoints);
1795-
err = -EINVAL;
1794+
"interface has no int in endpoints, but must have minimum 1\n");
17961795
goto fail3;
17971796
}
1798-
endpoint = &intf->cur_altsetting->endpoint[0].desc;
17991797

18001798
/* Go set up our URB, which is called when the tablet receives
18011799
* input.

0 commit comments

Comments
 (0)