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
	
	Block a user