Skip to content

Commit

Permalink
Revert "Input: bcm5974 - check endpoint type before starting traffic"
Browse files Browse the repository at this point in the history
This patch intended to fix an well-knonw issue in old drivers where the
endpoint type is taken for granted, which is often triggered by fuzzers.

That was the case for this driver [1], and although the fix seems to be
correct, it uncovered another issue that leads to a regression [2], if
the endpoints of the current interface are checked.

The driver makes use of endpoints that belong to a different interface
rather than the one it binds (it binds to the third interface, but also
accesses an endpoint from a different one). The driver should claim the
interfaces it requires, but that is still not the case.

Given that the regression is more severe than the issue found by
syzkaller, the best approach is reverting the patch that causes the
regression, and trying to fix the underlying problem before checking
the endpoint types again.

Note that reverting this patch will probably trigger the syzkaller bug
at some point.

This reverts commit 2b9c3eb.

Link: https://syzkaller.appspot.com/bug?extid=348331f63b034f89b622 [1]
Link: https://lore.kernel.org/linux-input/87sf161jjc.wl-tiwai@suse.de/ [2]

Fixes: 2b9c3eb ("Input: bcm5974 - check endpoint type before starting traffic")
Reported-by: Jacopo Radice <jacopo.radice@outlook.com>
Closes: https://bugzilla.suse.com/show_bug.cgi?id=1220030
Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
Link: https://lore.kernel.org/r/20240305-revert_bcm5974_ep_check-v3-1-527198cf6499@gmail.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
  • Loading branch information
Javier Carrasco authored and Dmitry Torokhov committed Mar 5, 2024
1 parent dd50f77 commit 7105e92
Showing 1 changed file with 0 additions and 20 deletions.
20 changes: 0 additions & 20 deletions drivers/input/mouse/bcm5974.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
* Copyright (C) 2006 Nicolas Boichat (nicolas@boichat.ch)
*/

#include "linux/usb.h"
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/slab.h>
Expand Down Expand Up @@ -194,8 +193,6 @@ enum tp_type {

/* list of device capability bits */
#define HAS_INTEGRATED_BUTTON 1
/* maximum number of supported endpoints (currently trackpad and button) */
#define MAX_ENDPOINTS 2

/* trackpad finger data block size */
#define FSIZE_TYPE1 (14 * sizeof(__le16))
Expand Down Expand Up @@ -894,18 +891,6 @@ static int bcm5974_resume(struct usb_interface *iface)
return error;
}

static bool bcm5974_check_endpoints(struct usb_interface *iface,
const struct bcm5974_config *cfg)
{
u8 ep_addr[MAX_ENDPOINTS + 1] = {0};

ep_addr[0] = cfg->tp_ep;
if (cfg->tp_type == TYPE1)
ep_addr[1] = cfg->bt_ep;

return usb_check_int_endpoints(iface, ep_addr);
}

static int bcm5974_probe(struct usb_interface *iface,
const struct usb_device_id *id)
{
Expand All @@ -918,11 +903,6 @@ static int bcm5974_probe(struct usb_interface *iface,
/* find the product index */
cfg = bcm5974_get_config(udev);

if (!bcm5974_check_endpoints(iface, cfg)) {
dev_err(&iface->dev, "Unexpected non-int endpoint\n");
return -ENODEV;
}

/* allocate memory for our device state and initialize it */
dev = kzalloc(sizeof(struct bcm5974), GFP_KERNEL);
input_dev = input_allocate_device();
Expand Down

0 comments on commit 7105e92

Please sign in to comment.