Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'usb-5.17-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb

Pull USB fixes from Greg KH:
"Here are some small USB driver fixes for 5.17-rc4 that resolve some
reported issues and add new device ids:

- usb-serial new device ids

- ulpi cleanup fixes

- f_fs use-after-free fix

- dwc3 driver fixes

- ax88179_178a usb network driver fix

- usb gadget fixes

There is a revert at the end of this series to resolve a build problem
that 0-day found yesterday. Most of these have been in linux-next,
except for the last few, and all have now passed 0-day tests"

* tag 'usb-5.17-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb:
Revert "usb: dwc2: drd: fix soft connect when gadget is unconfigured"
usb: dwc2: drd: fix soft connect when gadget is unconfigured
usb: gadget: rndis: check size of RNDIS_MSG_SET command
USB: gadget: validate interface OS descriptor requests
usb: core: Unregister device on component_add() failure
net: usb: ax88179_178a: Fix out-of-bounds accesses in RX fixup
usb: dwc3: gadget: Prevent core from processing stale TRBs
USB: serial: cp210x: add CPI Bulk Coin Recycler id
USB: serial: cp210x: add NCR Retail IO box id
USB: serial: ftdi_sio: add support for Brainboxes US-159/235/320
usb: gadget: f_uac2: Define specific wTerminalType
usb: gadget: udc: renesas_usb3: Fix host to USB_ROLE_NONE transition
usb: raw-gadget: fix handling of dual-direction-capable endpoints
usb: usb251xb: add boost-up property support
usb: ulpi: Call of_node_put correctly
usb: ulpi: Move of_node_put to ulpi_dev_release
USB: serial: option: add ZTE MF286D modem
USB: serial: ch341: add support for GW Instek USB2.0-Serial devices
usb: f_fs: Fix use-after-free for epfile
usb: dwc3: xilinx: fix uninitialized return value

+135 -56
+38 -28
drivers/net/usb/ax88179_178a.c
··· 1468 1468 u16 hdr_off; 1469 1469 u32 *pkt_hdr; 1470 1470 1471 - /* This check is no longer done by usbnet */ 1472 - if (skb->len < dev->net->hard_header_len) 1471 + /* At the end of the SKB, there's a header telling us how many packets 1472 + * are bundled into this buffer and where we can find an array of 1473 + * per-packet metadata (which contains elements encoded into u16). 1474 + */ 1475 + if (skb->len < 4) 1473 1476 return 0; 1474 - 1475 1477 skb_trim(skb, skb->len - 4); 1476 1478 rx_hdr = get_unaligned_le32(skb_tail_pointer(skb)); 1477 - 1478 1479 pkt_cnt = (u16)rx_hdr; 1479 1480 hdr_off = (u16)(rx_hdr >> 16); 1481 + 1482 + if (pkt_cnt == 0) 1483 + return 0; 1484 + 1485 + /* Make sure that the bounds of the metadata array are inside the SKB 1486 + * (and in front of the counter at the end). 1487 + */ 1488 + if (pkt_cnt * 2 + hdr_off > skb->len) 1489 + return 0; 1480 1490 pkt_hdr = (u32 *)(skb->data + hdr_off); 1481 1491 1482 - while (pkt_cnt--) { 1492 + /* Packets must not overlap the metadata array */ 1493 + skb_trim(skb, hdr_off); 1494 + 1495 + for (; ; pkt_cnt--, pkt_hdr++) { 1483 1496 u16 pkt_len; 1484 1497 1485 1498 le32_to_cpus(pkt_hdr); 1486 1499 pkt_len = (*pkt_hdr >> 16) & 0x1fff; 1487 1500 1501 + if (pkt_len > skb->len) 1502 + return 0; 1503 + 1488 1504 /* Check CRC or runt packet */ 1489 - if ((*pkt_hdr & AX_RXHDR_CRC_ERR) || 1490 - (*pkt_hdr & AX_RXHDR_DROP_ERR)) { 1491 - skb_pull(skb, (pkt_len + 7) & 0xFFF8); 1492 - pkt_hdr++; 1493 - continue; 1494 - } 1505 + if (((*pkt_hdr & (AX_RXHDR_CRC_ERR | AX_RXHDR_DROP_ERR)) == 0) && 1506 + pkt_len >= 2 + ETH_HLEN) { 1507 + bool last = (pkt_cnt == 0); 1495 1508 1496 - if (pkt_cnt == 0) { 1497 - skb->len = pkt_len; 1498 - /* Skip IP alignment pseudo header */ 1499 - skb_pull(skb, 2); 1500 - skb_set_tail_pointer(skb, skb->len); 1501 - skb->truesize = pkt_len + sizeof(struct sk_buff); 1502 - ax88179_rx_checksum(skb, pkt_hdr); 1503 - return 1; 1504 - } 1505 - 1506 - ax_skb = skb_clone(skb, GFP_ATOMIC); 1507 - if (ax_skb) { 1509 + if (last) { 1510 + ax_skb = skb; 1511 + } else { 1512 + ax_skb = skb_clone(skb, GFP_ATOMIC); 1513 + if (!ax_skb) 1514 + return 0; 1515 + } 1508 1516 ax_skb->len = pkt_len; 1509 1517 /* Skip IP alignment pseudo header */ 1510 1518 skb_pull(ax_skb, 2); 1511 1519 skb_set_tail_pointer(ax_skb, ax_skb->len); 1512 1520 ax_skb->truesize = pkt_len + sizeof(struct sk_buff); 1513 1521 ax88179_rx_checksum(ax_skb, pkt_hdr); 1522 + 1523 + if (last) 1524 + return 1; 1525 + 1514 1526 usbnet_skb_return(dev, ax_skb); 1515 - } else { 1516 - return 0; 1517 1527 } 1518 1528 1519 - skb_pull(skb, (pkt_len + 7) & 0xFFF8); 1520 - pkt_hdr++; 1529 + /* Trim this packet away from the SKB */ 1530 + if (!skb_pull(skb, (pkt_len + 7) & 0xFFF8)) 1531 + return 0; 1521 1532 } 1522 - return 1; 1523 1533 } 1524 1534 1525 1535 static struct sk_buff *
+7 -3
drivers/usb/common/ulpi.c
··· 130 130 131 131 static void ulpi_dev_release(struct device *dev) 132 132 { 133 + of_node_put(dev->of_node); 133 134 kfree(to_ulpi_dev(dev)); 134 135 } 135 136 ··· 248 247 return ret; 249 248 250 249 ret = ulpi_read_id(ulpi); 251 - if (ret) 250 + if (ret) { 251 + of_node_put(ulpi->dev.of_node); 252 252 return ret; 253 + } 253 254 254 255 ret = device_register(&ulpi->dev); 255 - if (ret) 256 + if (ret) { 257 + put_device(&ulpi->dev); 256 258 return ret; 259 + } 257 260 258 261 dev_dbg(&ulpi->dev, "registered ULPI PHY: vendor %04x, product %04x\n", 259 262 ulpi->id.vendor, ulpi->id.product); ··· 304 299 */ 305 300 void ulpi_unregister_interface(struct ulpi *ulpi) 306 301 { 307 - of_node_put(ulpi->dev.of_node); 308 302 device_unregister(&ulpi->dev); 309 303 } 310 304 EXPORT_SYMBOL_GPL(ulpi_unregister_interface);
+6 -3
drivers/usb/core/port.c
··· 602 602 return retval; 603 603 } 604 604 605 - find_and_link_peer(hub, port1); 606 - 607 605 retval = component_add(&port_dev->dev, &connector_ops); 608 - if (retval) 606 + if (retval) { 609 607 dev_warn(&port_dev->dev, "failed to add component\n"); 608 + device_unregister(&port_dev->dev); 609 + return retval; 610 + } 611 + 612 + find_and_link_peer(hub, port1); 610 613 611 614 /* 612 615 * Enable runtime pm and hold a refernce that hub_configure()
+1 -1
drivers/usb/dwc3/dwc3-xilinx.c
··· 99 99 struct device *dev = priv_data->dev; 100 100 struct reset_control *crst, *hibrst, *apbrst; 101 101 struct phy *usb3_phy; 102 - int ret; 102 + int ret = 0; 103 103 u32 reg; 104 104 105 105 usb3_phy = devm_phy_optional_get(dev, "usb3-phy");
+13
drivers/usb/dwc3/gadget.c
··· 1291 1291 if (usb_endpoint_xfer_bulk(dep->endpoint.desc) && dep->stream_capable) 1292 1292 trb->ctrl |= DWC3_TRB_CTRL_SID_SOFN(stream_id); 1293 1293 1294 + /* 1295 + * As per data book 4.2.3.2TRB Control Bit Rules section 1296 + * 1297 + * The controller autonomously checks the HWO field of a TRB to determine if the 1298 + * entire TRB is valid. Therefore, software must ensure that the rest of the TRB 1299 + * is valid before setting the HWO field to '1'. In most systems, this means that 1300 + * software must update the fourth DWORD of a TRB last. 1301 + * 1302 + * However there is a possibility of CPU re-ordering here which can cause 1303 + * controller to observe the HWO bit set prematurely. 1304 + * Add a write memory barrier to prevent CPU re-ordering. 1305 + */ 1306 + wmb(); 1294 1307 trb->ctrl |= DWC3_TRB_CTRL_HWO; 1295 1308 1296 1309 dwc3_ep_inc_enq(dep);
+3
drivers/usb/gadget/composite.c
··· 1988 1988 if (w_index != 0x5 || (w_value >> 8)) 1989 1989 break; 1990 1990 interface = w_value & 0xFF; 1991 + if (interface >= MAX_CONFIG_INTERFACES || 1992 + !os_desc_cfg->interface[interface]) 1993 + break; 1991 1994 buf[6] = w_index; 1992 1995 count = count_ext_prop(os_desc_cfg, 1993 1996 interface);
+42 -14
drivers/usb/gadget/function/f_fs.c
··· 1711 1711 1712 1712 static void ffs_data_closed(struct ffs_data *ffs) 1713 1713 { 1714 + struct ffs_epfile *epfiles; 1715 + unsigned long flags; 1716 + 1714 1717 ENTER(); 1715 1718 1716 1719 if (atomic_dec_and_test(&ffs->opened)) { 1717 1720 if (ffs->no_disconnect) { 1718 1721 ffs->state = FFS_DEACTIVATED; 1719 - if (ffs->epfiles) { 1720 - ffs_epfiles_destroy(ffs->epfiles, 1721 - ffs->eps_count); 1722 - ffs->epfiles = NULL; 1723 - } 1722 + spin_lock_irqsave(&ffs->eps_lock, flags); 1723 + epfiles = ffs->epfiles; 1724 + ffs->epfiles = NULL; 1725 + spin_unlock_irqrestore(&ffs->eps_lock, 1726 + flags); 1727 + 1728 + if (epfiles) 1729 + ffs_epfiles_destroy(epfiles, 1730 + ffs->eps_count); 1731 + 1724 1732 if (ffs->setup_state == FFS_SETUP_PENDING) 1725 1733 __ffs_ep0_stall(ffs); 1726 1734 } else { ··· 1775 1767 1776 1768 static void ffs_data_clear(struct ffs_data *ffs) 1777 1769 { 1770 + struct ffs_epfile *epfiles; 1771 + unsigned long flags; 1772 + 1778 1773 ENTER(); 1779 1774 1780 1775 ffs_closed(ffs); 1781 1776 1782 1777 BUG_ON(ffs->gadget); 1783 1778 1784 - if (ffs->epfiles) { 1785 - ffs_epfiles_destroy(ffs->epfiles, ffs->eps_count); 1779 + spin_lock_irqsave(&ffs->eps_lock, flags); 1780 + epfiles = ffs->epfiles; 1781 + ffs->epfiles = NULL; 1782 + spin_unlock_irqrestore(&ffs->eps_lock, flags); 1783 + 1784 + /* 1785 + * potential race possible between ffs_func_eps_disable 1786 + * & ffs_epfile_release therefore maintaining a local 1787 + * copy of epfile will save us from use-after-free. 1788 + */ 1789 + if (epfiles) { 1790 + ffs_epfiles_destroy(epfiles, ffs->eps_count); 1786 1791 ffs->epfiles = NULL; 1787 1792 } 1788 1793 ··· 1943 1922 1944 1923 static void ffs_func_eps_disable(struct ffs_function *func) 1945 1924 { 1946 - struct ffs_ep *ep = func->eps; 1947 - struct ffs_epfile *epfile = func->ffs->epfiles; 1948 - unsigned count = func->ffs->eps_count; 1925 + struct ffs_ep *ep; 1926 + struct ffs_epfile *epfile; 1927 + unsigned short count; 1949 1928 unsigned long flags; 1950 1929 1951 1930 spin_lock_irqsave(&func->ffs->eps_lock, flags); 1931 + count = func->ffs->eps_count; 1932 + epfile = func->ffs->epfiles; 1933 + ep = func->eps; 1952 1934 while (count--) { 1953 1935 /* pending requests get nuked */ 1954 1936 if (ep->ep) ··· 1969 1945 1970 1946 static int ffs_func_eps_enable(struct ffs_function *func) 1971 1947 { 1972 - struct ffs_data *ffs = func->ffs; 1973 - struct ffs_ep *ep = func->eps; 1974 - struct ffs_epfile *epfile = ffs->epfiles; 1975 - unsigned count = ffs->eps_count; 1948 + struct ffs_data *ffs; 1949 + struct ffs_ep *ep; 1950 + struct ffs_epfile *epfile; 1951 + unsigned short count; 1976 1952 unsigned long flags; 1977 1953 int ret = 0; 1978 1954 1979 1955 spin_lock_irqsave(&func->ffs->eps_lock, flags); 1956 + ffs = func->ffs; 1957 + ep = func->eps; 1958 + epfile = ffs->epfiles; 1959 + count = ffs->eps_count; 1980 1960 while(count--) { 1981 1961 ep->ep->driver_data = ep; 1982 1962
+2 -2
drivers/usb/gadget/function/f_uac2.c
··· 203 203 204 204 .bDescriptorSubtype = UAC_INPUT_TERMINAL, 205 205 /* .bTerminalID = DYNAMIC */ 206 - .wTerminalType = cpu_to_le16(UAC_INPUT_TERMINAL_UNDEFINED), 206 + .wTerminalType = cpu_to_le16(UAC_INPUT_TERMINAL_MICROPHONE), 207 207 .bAssocTerminal = 0, 208 208 /* .bCSourceID = DYNAMIC */ 209 209 .iChannelNames = 0, ··· 231 231 232 232 .bDescriptorSubtype = UAC_OUTPUT_TERMINAL, 233 233 /* .bTerminalID = DYNAMIC */ 234 - .wTerminalType = cpu_to_le16(UAC_OUTPUT_TERMINAL_UNDEFINED), 234 + .wTerminalType = cpu_to_le16(UAC_OUTPUT_TERMINAL_SPEAKER), 235 235 .bAssocTerminal = 0, 236 236 /* .bSourceID = DYNAMIC */ 237 237 /* .bCSourceID = DYNAMIC */
+6 -3
drivers/usb/gadget/function/rndis.c
··· 637 637 rndis_set_cmplt_type *resp; 638 638 rndis_resp_t *r; 639 639 640 + BufLength = le32_to_cpu(buf->InformationBufferLength); 641 + BufOffset = le32_to_cpu(buf->InformationBufferOffset); 642 + if ((BufLength > RNDIS_MAX_TOTAL_SIZE) || 643 + (BufOffset + 8 >= RNDIS_MAX_TOTAL_SIZE)) 644 + return -EINVAL; 645 + 640 646 r = rndis_add_response(params, sizeof(rndis_set_cmplt_type)); 641 647 if (!r) 642 648 return -ENOMEM; 643 649 resp = (rndis_set_cmplt_type *)r->buf; 644 - 645 - BufLength = le32_to_cpu(buf->InformationBufferLength); 646 - BufOffset = le32_to_cpu(buf->InformationBufferOffset); 647 650 648 651 #ifdef VERBOSE_DEBUG 649 652 pr_debug("%s: Length: %d\n", __func__, BufLength);
+1 -1
drivers/usb/gadget/legacy/raw_gadget.c
··· 1004 1004 ret = -EBUSY; 1005 1005 goto out_unlock; 1006 1006 } 1007 - if ((in && !ep->ep->caps.dir_in) || (!in && ep->ep->caps.dir_in)) { 1007 + if (in != usb_endpoint_dir_in(ep->ep->desc)) { 1008 1008 dev_dbg(&dev->gadget->dev, "fail, wrong direction\n"); 1009 1009 ret = -EINVAL; 1010 1010 goto out_unlock;
+2
drivers/usb/gadget/udc/renesas_usb3.c
··· 2378 2378 switch (role) { 2379 2379 case USB_ROLE_NONE: 2380 2380 usb3->connection_state = USB_ROLE_NONE; 2381 + if (cur_role == USB_ROLE_HOST) 2382 + device_release_driver(host); 2381 2383 if (usb3->driver) 2382 2384 usb3_disconnect(usb3); 2383 2385 usb3_vbus_out(usb3, false);
+3 -1
drivers/usb/misc/usb251xb.c
··· 543 543 if (of_property_read_u16_array(np, "language-id", &hub->lang_id, 1)) 544 544 hub->lang_id = USB251XB_DEF_LANGUAGE_ID; 545 545 546 + if (of_property_read_u8(np, "boost-up", &hub->boost_up)) 547 + hub->boost_up = USB251XB_DEF_BOOST_UP; 548 + 546 549 cproperty_char = of_get_property(np, "manufacturer", NULL); 547 550 strlcpy(str, cproperty_char ? : USB251XB_DEF_MANUFACTURER_STRING, 548 551 sizeof(str)); ··· 587 584 * may be as soon as needed. 588 585 */ 589 586 hub->bat_charge_en = USB251XB_DEF_BATTERY_CHARGING_ENABLE; 590 - hub->boost_up = USB251XB_DEF_BOOST_UP; 591 587 hub->boost_57 = USB251XB_DEF_BOOST_57; 592 588 hub->boost_14 = USB251XB_DEF_BOOST_14; 593 589 hub->port_map12 = USB251XB_DEF_PORT_MAP_12;
+1
drivers/usb/serial/ch341.c
··· 85 85 { USB_DEVICE(0x1a86, 0x5523) }, 86 86 { USB_DEVICE(0x1a86, 0x7522) }, 87 87 { USB_DEVICE(0x1a86, 0x7523) }, 88 + { USB_DEVICE(0x2184, 0x0057) }, 88 89 { USB_DEVICE(0x4348, 0x5523) }, 89 90 { USB_DEVICE(0x9986, 0x7523) }, 90 91 { },
+2
drivers/usb/serial/cp210x.c
··· 51 51 static void cp210x_disable_event_mode(struct usb_serial_port *port); 52 52 53 53 static const struct usb_device_id id_table[] = { 54 + { USB_DEVICE(0x0404, 0x034C) }, /* NCR Retail IO Box */ 54 55 { USB_DEVICE(0x045B, 0x0053) }, /* Renesas RX610 RX-Stick */ 55 56 { USB_DEVICE(0x0471, 0x066A) }, /* AKTAKOM ACE-1001 cable */ 56 57 { USB_DEVICE(0x0489, 0xE000) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */ ··· 69 68 { USB_DEVICE(0x0FCF, 0x1004) }, /* Dynastream ANT2USB */ 70 69 { USB_DEVICE(0x0FCF, 0x1006) }, /* Dynastream ANT development board */ 71 70 { USB_DEVICE(0x0FDE, 0xCA05) }, /* OWL Wireless Electricity Monitor CM-160 */ 71 + { USB_DEVICE(0x106F, 0x0003) }, /* CPI / Money Controls Bulk Coin Recycler */ 72 72 { USB_DEVICE(0x10A6, 0xAA26) }, /* Knock-off DCU-11 cable */ 73 73 { USB_DEVICE(0x10AB, 0x10C5) }, /* Siemens MC60 Cable */ 74 74 { USB_DEVICE(0x10B5, 0xAC70) }, /* Nokia CA-42 USB */
+3
drivers/usb/serial/ftdi_sio.c
··· 969 969 { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_VX_023_PID) }, 970 970 { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_VX_034_PID) }, 971 971 { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_101_PID) }, 972 + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_159_PID) }, 972 973 { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_1_PID) }, 973 974 { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_2_PID) }, 974 975 { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_3_PID) }, ··· 978 977 { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_6_PID) }, 979 978 { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_7_PID) }, 980 979 { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_8_PID) }, 980 + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_235_PID) }, 981 981 { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_257_PID) }, 982 982 { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_1_PID) }, 983 983 { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_2_PID) }, 984 984 { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_3_PID) }, 985 985 { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_4_PID) }, 986 986 { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_313_PID) }, 987 + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_320_PID) }, 987 988 { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_324_PID) }, 988 989 { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_346_1_PID) }, 989 990 { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_346_2_PID) },
+3
drivers/usb/serial/ftdi_sio_ids.h
··· 1506 1506 #define BRAINBOXES_VX_023_PID 0x1003 /* VX-023 ExpressCard 1 Port RS422/485 */ 1507 1507 #define BRAINBOXES_VX_034_PID 0x1004 /* VX-034 ExpressCard 2 Port RS422/485 */ 1508 1508 #define BRAINBOXES_US_101_PID 0x1011 /* US-101 1xRS232 */ 1509 + #define BRAINBOXES_US_159_PID 0x1021 /* US-159 1xRS232 */ 1510 + #define BRAINBOXES_US_235_PID 0x1017 /* US-235 1xRS232 */ 1511 + #define BRAINBOXES_US_320_PID 0x1019 /* US-320 1xRS422/485 */ 1509 1512 #define BRAINBOXES_US_324_PID 0x1013 /* US-324 1xRS422/485 1Mbaud */ 1510 1513 #define BRAINBOXES_US_606_1_PID 0x2001 /* US-606 6 Port RS232 Serial Port 1 and 2 */ 1511 1514 #define BRAINBOXES_US_606_2_PID 0x2002 /* US-606 6 Port RS232 Serial Port 3 and 4 */
+2
drivers/usb/serial/option.c
··· 1649 1649 .driver_info = RSVD(2) }, 1650 1650 { USB_DEVICE_INTERFACE_CLASS(ZTE_VENDOR_ID, 0x1476, 0xff) }, /* GosunCn ZTE WeLink ME3630 (ECM/NCM mode) */ 1651 1651 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1481, 0xff, 0x00, 0x00) }, /* ZTE MF871A */ 1652 + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1485, 0xff, 0xff, 0xff), /* ZTE MF286D */ 1653 + .driver_info = RSVD(5) }, 1652 1654 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1533, 0xff, 0xff, 0xff) }, 1653 1655 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1534, 0xff, 0xff, 0xff) }, 1654 1656 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1535, 0xff, 0xff, 0xff) },