usb: usbtmc: reject interrupt endpoints with small wMaxPacketSize

The USB488 subclass specification requires interrupt wMaxPacketSize to
be 0x02, unless the device sends vendor-specific notifications.
Endpoints that advertise less than 2 bytes for wMaxPacketSize are
unlikely to work with the current driver, as URBs will not have enough
space for interrupt headers. Considering that any notification URBs will
be ignored by the driver, reject these endpoints early during probe.

Fixes: 041370cce8 ("USB: usbtmc: refactor endpoint retrieval")
Cc: stable <stable@kernel.org>
Suggested-by: Michal Pecio <michal.pecio@gmail.com>
Signed-off-by: Heitor Alves de Siqueira <halves@igalia.com>
Link: https://patch.msgid.link/20260505-usbtmc-iin-size-v3-2-a36113f62db7@igalia.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Heitor Alves de Siqueira 2026-05-05 15:56:04 -03:00 committed by Greg Kroah-Hartman
parent 52f2ad3f7e
commit 121d2f682b

View File

@ -2440,6 +2440,12 @@ static int usbtmc_probe(struct usb_interface *intf,
data->iin_ep = int_in->bEndpointAddress;
data->iin_wMaxPacketSize = usb_endpoint_maxp(int_in);
data->iin_interval = int_in->bInterval;
/* wMaxPacketSize should be 0x02 or more as per USB488 Table 22 */
if (iface_desc->desc.bInterfaceProtocol == 1 &&
data->iin_wMaxPacketSize < 2) {
retcode = -EINVAL;
goto err_put;
}
dev_dbg(&intf->dev, "Found Int in endpoint at %u\n",
data->iin_ep);
}