Commit 468c3f924f043cad7a04f4f4d5224a2c9bc886c1
Committed by
David S. Miller
1 parent
ac90fa6343
Exists in
master
and in
7 other branches
NET: cdc-phonet, handle empty phonet header
Currently, for N 5800 XM I get: cdc_phonet: probe of 1-6:1.10 failed with error -22 It's because phonet_header is empty. Extra altsetting looks like there: E 05 24 00 01 10 03 24 ab 05 24 06 0a 0b 04 24 fd .$....$..$....$. E 00 . I don't see the header used anywhere so just check if the phonet descriptor is there, not the structure itself. Signed-off-by: Jiri Slaby <jslaby@suse.cz> Cc: Rémi Denis-Courmont <remi.denis-courmont@nokia.com> Cc: David S. Miller <davem@davemloft.net> Acked-by: Rémi Denis-Courmont <remi.denis-courmont@nokia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Showing 1 changed file with 3 additions and 6 deletions Side-by-side Diff
drivers/net/usb/cdc-phonet.c
... | ... | @@ -328,13 +328,13 @@ |
328 | 328 | { |
329 | 329 | static const char ifname[] = "usbpn%d"; |
330 | 330 | const struct usb_cdc_union_desc *union_header = NULL; |
331 | - const struct usb_cdc_header_desc *phonet_header = NULL; | |
332 | 331 | const struct usb_host_interface *data_desc; |
333 | 332 | struct usb_interface *data_intf; |
334 | 333 | struct usb_device *usbdev = interface_to_usbdev(intf); |
335 | 334 | struct net_device *dev; |
336 | 335 | struct usbpn_dev *pnd; |
337 | 336 | u8 *data; |
337 | + int phonet = 0; | |
338 | 338 | int len, err; |
339 | 339 | |
340 | 340 | data = intf->altsetting->extra; |
... | ... | @@ -355,10 +355,7 @@ |
355 | 355 | (struct usb_cdc_union_desc *)data; |
356 | 356 | break; |
357 | 357 | case 0xAB: |
358 | - if (phonet_header || dlen < 5) | |
359 | - break; | |
360 | - phonet_header = | |
361 | - (struct usb_cdc_header_desc *)data; | |
358 | + phonet = 1; | |
362 | 359 | break; |
363 | 360 | } |
364 | 361 | } |
... | ... | @@ -366,7 +363,7 @@ |
366 | 363 | len -= dlen; |
367 | 364 | } |
368 | 365 | |
369 | - if (!union_header || !phonet_header) | |
366 | + if (!union_header || !phonet) | |
370 | 367 | return -EINVAL; |
371 | 368 | |
372 | 369 | data_intf = usb_ifnum_to_if(usbdev, union_header->bSlaveInterface0); |