On 15.11.21 08:28, syzbot wrote: > Hello, > > syzbot found the following issue on: > > HEAD commit: 048ff8629e11 Merge tag 'usb-5.16-rc1' of git://git.kernel... > git tree: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing > console output: https://syzkaller.appspot.com/x/log.txt?x=1480ade1b00000 > kernel config: https://syzkaller.appspot.com/x/.config?x=d6b387bc5d3e50f3 > dashboard link: https://syzkaller.appspot.com/bug?extid=63ee658b9a100ffadbe2 > compiler: gcc (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2 > syz repro: https://syzkaller.appspot.com/x/repro.syz?x=1313cb7cb00000 > C reproducer: https://syzkaller.appspot.com/x/repro.c?x=16a2f676b00000 > > IMPORTANT: if you fix the issue, please add the following tag to the commit: > Reported-by: syzbot+63ee658b9a100ffadbe2@xxxxxxxxxxxxxxxxxxxxxxxxx > #syz test https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git 048ff8629e11
>From 2f7c84e39b74ae581bf7d01dbc69d820d09da20a Mon Sep 17 00:00:00 2001 From: Oliver Neukum <oneukum@xxxxxxxx> Date: Thu, 18 Nov 2021 18:15:03 +0100 Subject: [PATCH] usbnet: sanity check for endpoint types A malicious device can pretend to be a device with a known configuration of endpoints yet present endpoints of the wrong type. Signed-off-by: Oliver Neukum <oneukum@xxxxxxxx> --- drivers/net/usb/usbnet.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index 9a6450f796dc..aaa897e6ba29 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c @@ -1772,6 +1772,11 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod) } else if (!info->in || !info->out) status = usbnet_get_endpoints (dev, udev); else { + /*sanity checks */ + if (!usb_endpoint_is_bulk_in(&udev->cur_altsetting->endpoint[info->in].desc)) + goto out3; + if (!usb_endpoint_is_bulk_out(&udev->cur_altsetting->endpoint[info->out].desc)) + goto out3; dev->in = usb_rcvbulkpipe (xdev, info->in); dev->out = usb_sndbulkpipe (xdev, info->out); if (!(info->flags & FLAG_NO_SETINT)) -- 2.26.2