linux/drivers/input/mouse
Javier Carrasco 2b9c3eb32a Input: bcm5974 - check endpoint type before starting traffic
syzbot has found a type mismatch between a USB pipe and the transfer
endpoint, which is triggered by the bcm5974 driver[1].

This driver expects the device to provide input interrupt endpoints and
if that is not the case, the driver registration should terminate.

Repros are available to reproduce this issue with a certain setup for
the dummy_hcd, leading to an interrupt/bulk mismatch which is caught in
the USB core after calling usb_submit_urb() with the following message:
"BOGUS urb xfer, pipe 1 != type 3"

Some other device drivers (like the appletouch driver bcm5974 is mainly
based on) provide some checking mechanism to make sure that an IN
interrupt endpoint is available. In this particular case the endpoint
addresses are provided by a config table, so the checking can be
targeted to the provided endpoints.

Add some basic checking to guarantee that the endpoints available match
the expected type for both the trackpad and button endpoints.

This issue was only found for the trackpad endpoint, but the checking
has been added to the button endpoint as well for the same reasons.

Given that there was never a check for the endpoint type, this bug has
been there since the first implementation of the driver (f89bd95c5c).

[1] https://syzkaller.appspot.com/bug?extid=348331f63b034f89b622

Fixes: f89bd95c5c ("Input: bcm5974 - add driver for Macbook Air and Pro Penryn touchpads")
Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
Reported-and-tested-by: syzbot+348331f63b034f89b622@syzkaller.appspotmail.com
Link: https://lore.kernel.org/r/20231007-topic-bcm5974_bulk-v3-1-d0f38b9d2935@gmail.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
2024-01-31 10:32:59 -08:00
..
alps.c Input: alps - fix compatibility with -funsigned-char 2023-03-19 23:07:04 -07:00
alps.h Input: psmouse - drop all unneeded functions from mouse headers 2019-08-20 14:15:36 -07:00
amimouse.c Input: amimouse - convert to platform remove callback returning void 2023-12-01 15:36:18 -08:00
appletouch.c Input: appletouch - initialize work before device registration 2021-12-30 21:04:04 -08:00
atarimouse.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
bcm5974.c Input: bcm5974 - check endpoint type before starting traffic 2024-01-31 10:32:59 -08:00
byd.c Input: byd - fix typo in a comment 2021-12-20 00:59:50 -08:00
byd.h Input: psmouse - drop all unneeded functions from mouse headers 2019-08-20 14:15:36 -07:00
cyapa_gen3.c Input: mouse - use sysfs_emit[_at]() instead of scnprintf() 2023-12-13 21:26:11 -08:00
cyapa_gen5.c Input: mouse - use sysfs_emit[_at]() instead of scnprintf() 2023-12-13 21:26:11 -08:00
cyapa_gen6.c Input: mouse - use sysfs_emit[_at]() instead of scnprintf() 2023-12-13 21:26:11 -08:00
cyapa.c Input: mouse - use sysfs_emit[_at]() instead of scnprintf() 2023-12-13 21:26:11 -08:00
cyapa.h
cypress_ps2.c Input: cypress_ps2 - fix typo in comment 2022-05-21 12:48:39 -07:00
cypress_ps2.h Input: psmouse - drop all unneeded functions from mouse headers 2019-08-20 14:15:36 -07:00
elan_i2c_core.c Input: mouse - use sysfs_emit[_at]() instead of scnprintf() 2023-12-13 21:26:11 -08:00
elan_i2c_i2c.c Input: elan_i2c - fix firmware update on newer ICs 2020-11-11 20:13:12 -08:00
elan_i2c_smbus.c Merge branch 'next' into for-linus 2020-12-14 16:27:23 -08:00
elan_i2c.h Input: elan_i2c - reduce the resume time for controller in Whitebox 2021-09-06 22:30:34 -07:00
elantech.c Input: psmouse - fix fast_reconnect function for PS/2 mode 2023-10-13 17:59:18 -07:00
elantech.h Input: elantech - fix protocol errors for some trackpoints in SMBus mode 2020-12-11 00:15:05 -08:00
focaltech.c Input: focaltech - use explicitly signed char type 2023-03-19 23:07:02 -07:00
focaltech.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
gpio_mouse.c Input: gpio_mouse - fix typos in comments 2022-06-22 15:29:35 -07:00
hgpk.c Input: hgpk - fix repeated word in a comment 2022-09-08 14:06:23 -07:00
hgpk.h Input: psmouse - drop all unneeded functions from mouse headers 2019-08-20 14:15:36 -07:00
inport.c input: drop empty comment blocks 2022-09-29 16:25:42 -07:00
Kconfig input: remove pxa930_trkball driver 2023-02-01 17:23:38 +01:00
lifebook.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
lifebook.h Input: psmouse - drop all unneeded functions from mouse headers 2019-08-20 14:15:36 -07:00
logibm.c input: drop empty comment blocks 2022-09-29 16:25:42 -07:00
logips2pp.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
logips2pp.h Input: psmouse - drop all unneeded functions from mouse headers 2019-08-20 14:15:36 -07:00
Makefile input: remove pxa930_trkball driver 2023-02-01 17:23:38 +01:00
maplemouse.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
navpoint.c Input: navpoint - convert to use GPIO descriptor 2023-12-13 21:26:13 -08:00
pc110pad.c input: drop empty comment blocks 2022-09-29 16:25:42 -07:00
psmouse-base.c Input: libps2 - introduce common interrupt handler 2023-05-18 11:40:32 -07:00
psmouse-smbus.c Revert "Input: psmouse - add delay when deactivating for SMBus mode" 2023-10-12 16:01:36 -07:00
psmouse.h Input: libps2 - attach ps2dev instances as serio port's drvdata 2023-05-18 11:40:32 -07:00
rpcmouse.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
sentelic.c Input: sentelic - fix error return when fsp_reg_write fails 2020-08-06 17:33:43 -07:00
sentelic.h Input: psmouse - drop all unneeded functions from mouse headers 2019-08-20 14:15:36 -07:00
sermouse.c input: drop empty comment blocks 2022-09-29 16:25:42 -07:00
synaptics_i2c.c Input: Switch i2c drivers back to use .probe() 2023-05-17 09:59:11 -07:00
synaptics_usb.c Input: move from strlcpy with unused retval to strscpy 2022-08-18 15:44:08 -07:00
synaptics.c Input: psmouse - enable Synaptics InterTouch for ThinkPad L14 G1 2023-11-15 16:52:02 +00:00
synaptics.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
touchkit_ps2.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
touchkit_ps2.h Input: psmouse - drop all unneeded functions from mouse headers 2019-08-20 14:15:36 -07:00
trackpoint.c Input: libps2 - attach ps2dev instances as serio port's drvdata 2023-05-18 11:40:32 -07:00
trackpoint.h Input: trackpoint - add new trackpoint variant IDs 2020-09-14 12:24:46 -07:00
vmmouse.c Input: vmmouse - disable vmmouse before entering suspend mode 2022-05-18 15:02:13 -07:00
vmmouse.h Input: psmouse - drop all unneeded functions from mouse headers 2019-08-20 14:15:36 -07:00
vsxxxaa.c input: drop empty comment blocks 2022-09-29 16:25:42 -07:00