mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-01-07 10:03:24 +00:00
USB: handle more rndis_host oddities
Workaround another device firmware bug, wherein CDC descriptors get placed in a wrong place never previously observed in the wild. Fix a bug where a seeming RNDIS device returns a bogus response during device initialization. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
47f8468e60
commit
4149b72eaa
@ -91,6 +91,22 @@ int usbnet_generic_cdc_bind(struct usbnet *dev, struct usb_interface *intf)
|
|||||||
"CDC descriptors on config\n");
|
"CDC descriptors on config\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Maybe CDC descriptors are after the endpoint? This bug has
|
||||||
|
* been seen on some 2Wire Inc RNDIS-ish products.
|
||||||
|
*/
|
||||||
|
if (len == 0) {
|
||||||
|
struct usb_host_endpoint *hep;
|
||||||
|
|
||||||
|
hep = intf->cur_altsetting->endpoint;
|
||||||
|
if (hep) {
|
||||||
|
buf = hep->extra;
|
||||||
|
len = hep->extralen;
|
||||||
|
}
|
||||||
|
if (len)
|
||||||
|
dev_dbg(&intf->dev,
|
||||||
|
"CDC descriptors on endpoint\n");
|
||||||
|
}
|
||||||
|
|
||||||
/* this assumes that if there's a non-RNDIS vendor variant
|
/* this assumes that if there's a non-RNDIS vendor variant
|
||||||
* of cdc-acm, it'll fail RNDIS requests cleanly.
|
* of cdc-acm, it'll fail RNDIS requests cleanly.
|
||||||
*/
|
*/
|
||||||
|
@ -515,6 +515,7 @@ static int rndis_bind(struct usbnet *dev, struct usb_interface *intf)
|
|||||||
dev_err(&intf->dev,
|
dev_err(&intf->dev,
|
||||||
"dev can't take %u byte packets (max %u)\n",
|
"dev can't take %u byte packets (max %u)\n",
|
||||||
dev->hard_mtu, tmp);
|
dev->hard_mtu, tmp);
|
||||||
|
retval = -EINVAL;
|
||||||
goto fail_and_release;
|
goto fail_and_release;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user