X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=kernel%2Fdrivers%2Fnet%2Fusb%2Fcdc-phonet.c;fp=kernel%2Fdrivers%2Fnet%2Fusb%2Fcdc-phonet.c;h=ff2270ead2e68b8a381ab42f6309d919f8b9ed12;hb=e09b41010ba33a20a87472ee821fa407a5b8da36;hp=415ce8b882c615f08d7368cdfa7bec68bef01fa7;hpb=f93b97fd65072de626c074dbe099a1fff05ce060;p=kvmfornfv.git diff --git a/kernel/drivers/net/usb/cdc-phonet.c b/kernel/drivers/net/usb/cdc-phonet.c index 415ce8b88..ff2270ead 100644 --- a/kernel/drivers/net/usb/cdc-phonet.c +++ b/kernel/drivers/net/usb/cdc-phonet.c @@ -340,32 +340,13 @@ static int usbpn_probe(struct usb_interface *intf, const struct usb_device_id *i u8 *data; int phonet = 0; int len, err; + struct usb_cdc_parsed_header hdr; data = intf->altsetting->extra; len = intf->altsetting->extralen; - while (len >= 3) { - u8 dlen = data[0]; - if (dlen < 3) - return -EINVAL; - - /* bDescriptorType */ - if (data[1] == USB_DT_CS_INTERFACE) { - /* bDescriptorSubType */ - switch (data[2]) { - case USB_CDC_UNION_TYPE: - if (union_header || dlen < 5) - break; - union_header = - (struct usb_cdc_union_desc *)data; - break; - case 0xAB: - phonet = 1; - break; - } - } - data += dlen; - len -= dlen; - } + cdc_parse_cdc_header(&hdr, intf, data, len); + union_header = hdr.usb_cdc_union_desc; + phonet = hdr.phonet_magic_present; if (!union_header || !phonet) return -EINVAL;