| From foo@baz Tue 01 Oct 2019 04:06:17 PM CEST |
| From: Bjørn Mork <bjorn@mork.no> |
| Date: Wed, 18 Sep 2019 14:17:38 +0200 |
| Subject: usbnet: ignore endpoints with invalid wMaxPacketSize |
| |
| From: Bjørn Mork <bjorn@mork.no> |
| |
| [ Upstream commit 8d3d7c2029c1b360f1a6b0a2fca470b57eb575c0 ] |
| |
| Endpoints with zero wMaxPacketSize are not usable for transferring |
| data. Ignore such endpoints when looking for valid in, out and |
| status pipes, to make the drivers more robust against invalid and |
| meaningless descriptors. |
| |
| The wMaxPacketSize of these endpoints are used for memory allocations |
| and as divisors in many usbnet minidrivers. Avoiding zero is therefore |
| critical. |
| |
| Signed-off-by: Bjørn Mork <bjorn@mork.no> |
| Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/usb/usbnet.c | 5 +++++ |
| 1 file changed, 5 insertions(+) |
| |
| --- a/drivers/net/usb/usbnet.c |
| +++ b/drivers/net/usb/usbnet.c |
| @@ -114,6 +114,11 @@ int usbnet_get_endpoints(struct usbnet * |
| int intr = 0; |
| |
| e = alt->endpoint + ep; |
| + |
| + /* ignore endpoints which cannot transfer data */ |
| + if (!usb_endpoint_maxp(&e->desc)) |
| + continue; |
| + |
| switch (e->desc.bmAttributes) { |
| case USB_ENDPOINT_XFER_INT: |
| if (!usb_endpoint_dir_in(&e->desc)) |