提交 15699e6f 编写于 作者: B Bjørn Mork 提交者: Greg Kroah-Hartman

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: NBjørn Mork <bjorn@mork.no>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
上级 3a0bac06
...@@ -57,6 +57,8 @@ MODULE_DEVICE_TABLE (usb, wdm_ids); ...@@ -57,6 +57,8 @@ MODULE_DEVICE_TABLE (usb, wdm_ids);
#define WDM_MAX 16 #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); static DEFINE_MUTEX(wdm_mutex);
...@@ -636,7 +638,7 @@ static int wdm_probe(struct usb_interface *intf, const struct usb_device_id *id) ...@@ -636,7 +638,7 @@ static int wdm_probe(struct usb_interface *intf, const struct usb_device_id *id)
struct usb_cdc_dmm_desc *dmhd; struct usb_cdc_dmm_desc *dmhd;
u8 *buffer = intf->altsetting->extra; u8 *buffer = intf->altsetting->extra;
int buflen = intf->altsetting->extralen; int buflen = intf->altsetting->extralen;
u16 maxcom = 0; u16 maxcom = WDM_DEFAULT_BUFSIZE;
if (!buffer) if (!buffer)
goto out; goto out;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册