aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Mork <bjorn@mork.no>2012-01-19 19:49:57 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-02-03 12:19:02 -0500
commit4df9c291640da8992e146076f57a8e563c449e31 (patch)
treea87727e7ddcb71f9af1652ff60716564fd84b6c3
parent5256ca41663c848ac24783a5161a97730a21696c (diff)
USB: cdc-wdm: Avoid hanging on interface with no USB_CDC_DMM_TYPE
commit 15699e6fafc3a90e5fdc2ef30555a04dee62286f upstream. 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@linuxfoundation.org>
-rw-r--r--drivers/usb/class/cdc-wdm.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
index 854615ca37a..90581a85134 100644
--- a/drivers/usb/class/cdc-wdm.c
+++ b/drivers/usb/class/cdc-wdm.c
@@ -57,6 +57,8 @@ MODULE_DEVICE_TABLE (usb, wdm_ids);
57 57
58#define WDM_MAX 16 58#define WDM_MAX 16
59 59
60/* CDC-WMC r1.1 requires wMaxCommand to be "at least 256 decimal (0x100)" */
61#define WDM_DEFAULT_BUFSIZE 256
60 62
61static DEFINE_MUTEX(wdm_mutex); 63static DEFINE_MUTEX(wdm_mutex);
62 64
@@ -636,7 +638,7 @@ static int wdm_probe(struct usb_interface *intf, const struct usb_device_id *id)
636 struct usb_cdc_dmm_desc *dmhd; 638 struct usb_cdc_dmm_desc *dmhd;
637 u8 *buffer = intf->altsetting->extra; 639 u8 *buffer = intf->altsetting->extra;
638 int buflen = intf->altsetting->extralen; 640 int buflen = intf->altsetting->extralen;
639 u16 maxcom = 0; 641 u16 maxcom = WDM_DEFAULT_BUFSIZE;
640 642
641 if (!buffer) 643 if (!buffer)
642 goto out; 644 goto out;