]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
usb: usbtmc: reject interrupt endpoints with small wMaxPacketSize
authorHeitor Alves de Siqueira <halves@igalia.com>
Tue, 5 May 2026 18:56:04 +0000 (15:56 -0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 22 May 2026 08:36:13 +0000 (10:36 +0200)
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: 041370cce889 ("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>
drivers/usb/class/usbtmc.c

index e15efd0c5ca73f503f077cca76f9c2f010e11580..af9ae55dae14e00962685d019c57daa333e77a70 100644 (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);
        }