mirror of https://gitee.com/openkylin/linux.git
USB: cdc-wdm: Avoid hanging on interface with no USB_CDC_DMM_TYPE
The probe does not strictly require the USB_CDC_DMM_TYPE descriptor, which is a good thing as it makes the driver usable on non-conforming interfaces. A user could e.g. bind to it to a CDC ECM interface by using the new_id and bind sysfs files. But this would fail with a 0 buffer length due to the missing descriptor. Fix by defining a reasonable fallback size: The minimum device receive buffer size required by the CDC WMC standard, revision 1.1 Signed-off-by: Bjørn Mork <bjorn@mork.no> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
8143a8963c
commit
7e3054a005
|
@ -57,6 +57,8 @@ MODULE_DEVICE_TABLE (usb, wdm_ids);
|
|||
|
||||
#define WDM_MAX 16
|
||||
|
||||
/* CDC-WMC r1.1 requires wMaxCommand to be "at least 256 decimal (0x100)" */
|
||||
#define WDM_DEFAULT_BUFSIZE 256
|
||||
|
||||
static DEFINE_MUTEX(wdm_mutex);
|
||||
|
||||
|
@ -602,7 +604,7 @@ static int wdm_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
|||
struct usb_cdc_dmm_desc *dmhd;
|
||||
u8 *buffer = intf->altsetting->extra;
|
||||
int buflen = intf->altsetting->extralen;
|
||||
u16 maxcom = 0;
|
||||
u16 maxcom = WDM_DEFAULT_BUFSIZE;
|
||||
|
||||
if (!buffer)
|
||||
goto out;
|
||||
|
|
Loading…
Reference in New Issue