75 lines
2.4 KiB
Diff
75 lines
2.4 KiB
Diff
|
From 468c3f924f043cad7a04f4f4d5224a2c9bc886c1 Mon Sep 17 00:00:00 2001
|
||
|
From: Jiri Slaby <jslaby@suse.cz>
|
||
|
Date: Sun, 13 Mar 2011 06:54:31 +0000
|
||
|
Subject: NET: cdc-phonet, handle empty phonet header
|
||
|
MIME-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
Git-commit: 468c3f924f043cad7a04f4f4d5224a2c9bc886c1
|
||
|
Patch-mainline: yes
|
||
|
References: bnc#673992
|
||
|
|
||
|
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>
|
||
|
---
|
||
|
drivers/net/usb/cdc-phonet.c | 9 +++------
|
||
|
1 files changed, 3 insertions(+), 6 deletions(-)
|
||
|
|
||
|
diff --git a/drivers/net/usb/cdc-phonet.c b/drivers/net/usb/cdc-phonet.c
|
||
|
index 4cf4e36..f967913 100644
|
||
|
--- a/drivers/net/usb/cdc-phonet.c
|
||
|
+++ b/drivers/net/usb/cdc-phonet.c
|
||
|
@@ -328,13 +328,13 @@ int usbpn_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
||
|
{
|
||
|
static const char ifname[] = "usbpn%d";
|
||
|
const struct usb_cdc_union_desc *union_header = NULL;
|
||
|
- const struct usb_cdc_header_desc *phonet_header = NULL;
|
||
|
const struct usb_host_interface *data_desc;
|
||
|
struct usb_interface *data_intf;
|
||
|
struct usb_device *usbdev = interface_to_usbdev(intf);
|
||
|
struct net_device *dev;
|
||
|
struct usbpn_dev *pnd;
|
||
|
u8 *data;
|
||
|
+ int phonet = 0;
|
||
|
int len, err;
|
||
|
|
||
|
data = intf->altsetting->extra;
|
||
|
@@ -355,10 +355,7 @@ int usbpn_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
||
|
(struct usb_cdc_union_desc *)data;
|
||
|
break;
|
||
|
case 0xAB:
|
||
|
- if (phonet_header || dlen < 5)
|
||
|
- break;
|
||
|
- phonet_header =
|
||
|
- (struct usb_cdc_header_desc *)data;
|
||
|
+ phonet = 1;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
@@ -366,7 +363,7 @@ int usbpn_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
||
|
len -= dlen;
|
||
|
}
|
||
|
|
||
|
- if (!union_header || !phonet_header)
|
||
|
+ if (!union_header || !phonet)
|
||
|
return -EINVAL;
|
||
|
|
||
|
data_intf = usb_ifnum_to_if(usbdev, union_header->bSlaveInterface0);
|
||
|
--
|
||
|
1.7.4.1
|
||
|
|