From: Greg Kroah-Hartman Date: Sat, 21 Oct 2023 20:02:13 +0000 (+0200) Subject: 4.19-stable patches X-Git-Tag: v4.14.328~56 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2b8c9069137ab3ce23b3e74566731eabfca2a08e;p=thirdparty%2Fkernel%2Fstable-queue.git 4.19-stable patches added patches: perf-disallow-mis-matched-inherited-group-reads.patch s390-pci-fix-iommu-bitmap-allocation.patch usb-serial-option-add-entry-for-sierra-em9191-with-new-firmware.patch usb-serial-option-add-fibocom-to-dell-custom-modem-fm101r-gl.patch usb-serial-option-add-telit-le910c4-wwx-0x1035-composition.patch --- diff --git a/queue-4.19/perf-disallow-mis-matched-inherited-group-reads.patch b/queue-4.19/perf-disallow-mis-matched-inherited-group-reads.patch new file mode 100644 index 00000000000..8d3cc836ea6 --- /dev/null +++ b/queue-4.19/perf-disallow-mis-matched-inherited-group-reads.patch @@ -0,0 +1,142 @@ +From 32671e3799ca2e4590773fd0e63aaa4229e50c06 Mon Sep 17 00:00:00 2001 +From: Peter Zijlstra +Date: Wed, 18 Oct 2023 13:56:54 +0200 +Subject: perf: Disallow mis-matched inherited group reads + +From: Peter Zijlstra + +commit 32671e3799ca2e4590773fd0e63aaa4229e50c06 upstream. + +Because group consistency is non-atomic between parent (filedesc) and children +(inherited) events, it is possible for PERF_FORMAT_GROUP read() to try and sum +non-matching counter groups -- with non-sensical results. + +Add group_generation to distinguish the case where a parent group removes and +adds an event and thus has the same number, but a different configuration of +events as inherited groups. + +This became a problem when commit fa8c269353d5 ("perf/core: Invert +perf_read_group() loops") flipped the order of child_list and sibling_list. +Previously it would iterate the group (sibling_list) first, and for each +sibling traverse the child_list. In this order, only the group composition of +the parent is relevant. By flipping the order the group composition of the +child (inherited) events becomes an issue and the mis-match in group +composition becomes evident. + +That said; even prior to this commit, while reading of a group that is not +equally inherited was not broken, it still made no sense. + +(Ab)use ECHILD as error return to indicate issues with child process group +composition. + +Fixes: fa8c269353d5 ("perf/core: Invert perf_read_group() loops") +Reported-by: Budimir Markovic +Signed-off-by: Peter Zijlstra (Intel) +Link: https://lkml.kernel.org/r/20231018115654.GK33217@noisy.programming.kicks-ass.net +Signed-off-by: Greg Kroah-Hartman +--- + include/linux/perf_event.h | 1 + + kernel/events/core.c | 39 +++++++++++++++++++++++++++++++++------ + 2 files changed, 34 insertions(+), 6 deletions(-) + +--- a/include/linux/perf_event.h ++++ b/include/linux/perf_event.h +@@ -593,6 +593,7 @@ struct perf_event { + /* The cumulative AND of all event_caps for events in this group. */ + int group_caps; + ++ unsigned int group_generation; + struct perf_event *group_leader; + struct pmu *pmu; + void *pmu_private; +--- a/kernel/events/core.c ++++ b/kernel/events/core.c +@@ -1848,6 +1848,7 @@ static void perf_group_attach(struct per + + list_add_tail(&event->sibling_list, &group_leader->sibling_list); + group_leader->nr_siblings++; ++ group_leader->group_generation++; + + perf_event__header_size(group_leader); + +@@ -1918,6 +1919,7 @@ static void perf_group_detach(struct per + if (event->group_leader != event) { + list_del_init(&event->sibling_list); + event->group_leader->nr_siblings--; ++ event->group_leader->group_generation++; + goto out; + } + +@@ -4755,7 +4757,7 @@ static int __perf_read_group_add(struct + u64 read_format, u64 *values) + { + struct perf_event_context *ctx = leader->ctx; +- struct perf_event *sub; ++ struct perf_event *sub, *parent; + unsigned long flags; + int n = 1; /* skip @nr */ + int ret; +@@ -4765,6 +4767,33 @@ static int __perf_read_group_add(struct + return ret; + + raw_spin_lock_irqsave(&ctx->lock, flags); ++ /* ++ * Verify the grouping between the parent and child (inherited) ++ * events is still in tact. ++ * ++ * Specifically: ++ * - leader->ctx->lock pins leader->sibling_list ++ * - parent->child_mutex pins parent->child_list ++ * - parent->ctx->mutex pins parent->sibling_list ++ * ++ * Because parent->ctx != leader->ctx (and child_list nests inside ++ * ctx->mutex), group destruction is not atomic between children, also ++ * see perf_event_release_kernel(). Additionally, parent can grow the ++ * group. ++ * ++ * Therefore it is possible to have parent and child groups in a ++ * different configuration and summing over such a beast makes no sense ++ * what so ever. ++ * ++ * Reject this. ++ */ ++ parent = leader->parent; ++ if (parent && ++ (parent->group_generation != leader->group_generation || ++ parent->nr_siblings != leader->nr_siblings)) { ++ ret = -ECHILD; ++ goto unlock; ++ } + + /* + * Since we co-schedule groups, {enabled,running} times of siblings +@@ -4794,8 +4823,9 @@ static int __perf_read_group_add(struct + values[n++] = primary_event_id(sub); + } + ++unlock: + raw_spin_unlock_irqrestore(&ctx->lock, flags); +- return 0; ++ return ret; + } + + static int perf_read_group(struct perf_event *event, +@@ -4814,10 +4844,6 @@ static int perf_read_group(struct perf_e + + values[0] = 1 + leader->nr_siblings; + +- /* +- * By locking the child_mutex of the leader we effectively +- * lock the child list of all siblings.. XXX explain how. +- */ + mutex_lock(&leader->child_mutex); + + ret = __perf_read_group_add(leader, read_format, values); +@@ -11603,6 +11629,7 @@ static int inherit_group(struct perf_eve + if (IS_ERR(child_ctr)) + return PTR_ERR(child_ctr); + } ++ leader->group_generation = parent_event->group_generation; + return 0; + } + diff --git a/queue-4.19/s390-pci-fix-iommu-bitmap-allocation.patch b/queue-4.19/s390-pci-fix-iommu-bitmap-allocation.patch new file mode 100644 index 00000000000..3a80ef6bae8 --- /dev/null +++ b/queue-4.19/s390-pci-fix-iommu-bitmap-allocation.patch @@ -0,0 +1,79 @@ +From c1ae1c59c8c6e0b66a718308c623e0cb394dab6b Mon Sep 17 00:00:00 2001 +From: Niklas Schnelle +Date: Tue, 17 Oct 2023 15:37:29 +0200 +Subject: s390/pci: fix iommu bitmap allocation + +From: Niklas Schnelle + +commit c1ae1c59c8c6e0b66a718308c623e0cb394dab6b upstream. + +Since the fixed commits both zdev->iommu_bitmap and zdev->lazy_bitmap +are allocated as vzalloc(zdev->iommu_pages / 8). The problem is that +zdev->iommu_bitmap is a pointer to unsigned long but the above only +yields an allocation that is a multiple of sizeof(unsigned long) which +is 8 on s390x if the number of IOMMU pages is a multiple of 64. +This in turn is the case only if the effective IOMMU aperture is +a multiple of 64 * 4K = 256K. This is usually the case and so didn't +cause visible issues since both the virt_to_phys(high_memory) reduced +limit and hardware limits use nice numbers. + +Under KVM, and in particular with QEMU limiting the IOMMU aperture to +the vfio DMA limit (default 65535), it is possible for the reported +aperture not to be a multiple of 256K however. In this case we end up +with an iommu_bitmap whose allocation is not a multiple of +8 causing bitmap operations to access it out of bounds. + +Sadly we can't just fix this in the obvious way and use bitmap_zalloc() +because for large RAM systems (tested on 8 TiB) the zdev->iommu_bitmap +grows too large for kmalloc(). So add our own bitmap_vzalloc() wrapper. +This might be a candidate for common code, but this area of code will +be replaced by the upcoming conversion to use the common code DMA API on +s390 so just add a local routine. + +Fixes: 224593215525 ("s390/pci: use virtual memory for iommu bitmap") +Fixes: 13954fd6913a ("s390/pci_dma: improve lazy flush for unmap") +Cc: stable@vger.kernel.org +Reviewed-by: Matthew Rosato +Signed-off-by: Niklas Schnelle +Signed-off-by: Vasily Gorbik +Signed-off-by: Greg Kroah-Hartman +--- + arch/s390/pci/pci_dma.c | 15 +++++++++++++-- + 1 file changed, 13 insertions(+), 2 deletions(-) + +--- a/arch/s390/pci/pci_dma.c ++++ b/arch/s390/pci/pci_dma.c +@@ -545,6 +545,17 @@ static void s390_dma_unmap_sg(struct dev + s->dma_length = 0; + } + } ++ ++static unsigned long *bitmap_vzalloc(size_t bits, gfp_t flags) ++{ ++ size_t n = BITS_TO_LONGS(bits); ++ size_t bytes; ++ ++ if (unlikely(check_mul_overflow(n, sizeof(unsigned long), &bytes))) ++ return NULL; ++ ++ return vzalloc(bytes); ++} + + static int s390_mapping_error(struct device *dev, dma_addr_t dma_addr) + { +@@ -586,13 +597,13 @@ int zpci_dma_init_device(struct zpci_dev + zdev->end_dma - zdev->start_dma + 1); + zdev->end_dma = zdev->start_dma + zdev->iommu_size - 1; + zdev->iommu_pages = zdev->iommu_size >> PAGE_SHIFT; +- zdev->iommu_bitmap = vzalloc(zdev->iommu_pages / 8); ++ zdev->iommu_bitmap = bitmap_vzalloc(zdev->iommu_pages, GFP_KERNEL); + if (!zdev->iommu_bitmap) { + rc = -ENOMEM; + goto free_dma_table; + } + if (!s390_iommu_strict) { +- zdev->lazy_bitmap = vzalloc(zdev->iommu_pages / 8); ++ zdev->lazy_bitmap = bitmap_vzalloc(zdev->iommu_pages, GFP_KERNEL); + if (!zdev->lazy_bitmap) { + rc = -ENOMEM; + goto free_bitmap; diff --git a/queue-4.19/series b/queue-4.19/series index fb657537ddc..d4b4727513a 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -89,3 +89,8 @@ mtd-spinand-micron-correct-bitmask-for-ecc-status.patch mmc-core-capture-correct-oemid-bits-for-emmc-cards.patch revert-pinctrl-avoid-unsafe-code-pattern-in-find_pinctrl.patch acpi-irq-fix-incorrect-return-value-in-acpi_register_gsi.patch +usb-serial-option-add-telit-le910c4-wwx-0x1035-composition.patch +usb-serial-option-add-entry-for-sierra-em9191-with-new-firmware.patch +usb-serial-option-add-fibocom-to-dell-custom-modem-fm101r-gl.patch +perf-disallow-mis-matched-inherited-group-reads.patch +s390-pci-fix-iommu-bitmap-allocation.patch diff --git a/queue-4.19/usb-serial-option-add-entry-for-sierra-em9191-with-new-firmware.patch b/queue-4.19/usb-serial-option-add-entry-for-sierra-em9191-with-new-firmware.patch new file mode 100644 index 00000000000..9004e28840f --- /dev/null +++ b/queue-4.19/usb-serial-option-add-entry-for-sierra-em9191-with-new-firmware.patch @@ -0,0 +1,45 @@ +From 064f6e2ba9eb59b2c87b866e1e968e79ccedf9dd Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Beno=C3=AEt=20Monin?= +Date: Mon, 2 Oct 2023 17:51:40 +0200 +Subject: USB: serial: option: add entry for Sierra EM9191 with new firmware +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Benoît Monin + +commit 064f6e2ba9eb59b2c87b866e1e968e79ccedf9dd upstream. + +Following a firmware update of the modem, the interface for the AT +command port changed, so add it back. + +T: Bus=08 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#= 2 Spd=5000 MxCh= 0 +D: Ver= 3.20 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs= 1 +P: Vendor=1199 ProdID=90d3 Rev=00.06 +S: Manufacturer=Sierra Wireless, Incorporated +S: Product=Sierra Wireless EM9191 +S: SerialNumber=xxxxxxxxxxxxxxxx +C: #Ifs= 4 Cfg#= 1 Atr=a0 MxPwr=896mA +I: If#=0x0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim +I: If#=0x1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim +I: If#=0x3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=(none) +I: If#=0x4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option + +Signed-off-by: Benoît Monin +Cc: stable@vger.kernel.org +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/serial/option.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -2263,6 +2263,7 @@ static const struct usb_device_id option + { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1406, 0xff) }, /* GosunCn GM500 ECM/NCM */ + { USB_DEVICE_AND_INTERFACE_INFO(OPPO_VENDOR_ID, OPPO_PRODUCT_R11, 0xff, 0xff, 0x30) }, + { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0xff, 0x30) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0xff, 0x40) }, + { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0, 0) }, + { USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, TOZED_PRODUCT_LT70C, 0xff, 0, 0) }, + { } /* Terminating entry */ diff --git a/queue-4.19/usb-serial-option-add-fibocom-to-dell-custom-modem-fm101r-gl.patch b/queue-4.19/usb-serial-option-add-fibocom-to-dell-custom-modem-fm101r-gl.patch new file mode 100644 index 00000000000..bfcaddad4c6 --- /dev/null +++ b/queue-4.19/usb-serial-option-add-fibocom-to-dell-custom-modem-fm101r-gl.patch @@ -0,0 +1,88 @@ +From 52480e1f1a259c93d749ba3961af0bffedfe7a7a Mon Sep 17 00:00:00 2001 +From: Puliang Lu +Date: Mon, 16 Oct 2023 15:36:16 +0800 +Subject: USB: serial: option: add Fibocom to DELL custom modem FM101R-GL + +From: Puliang Lu + +commit 52480e1f1a259c93d749ba3961af0bffedfe7a7a upstream. + +Update the USB serial option driver support for the Fibocom +FM101R-GL LTE modules as there are actually several different variants. + +- VID:PID 413C:8213, FM101R-GL are laptop M.2 cards (with + MBIM interfaces for Linux) + +- VID:PID 413C:8215, FM101R-GL ESIM are laptop M.2 cards (with + MBIM interface for Linux) + +0x8213: mbim, tty +0x8215: mbim, tty + +T: Bus=04 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 2 Spd=5000 MxCh= 0 +D: Ver= 3.20 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs= 1 +P: Vendor=413c ProdID=8213 Rev= 5.04 +S: Manufacturer=Fibocom Wireless Inc. +S: Product=Fibocom FM101-GL Module +S: SerialNumber=a3b7cbf0 +C:* #Ifs= 3 Cfg#= 1 Atr=a0 MxPwr=896mA +A: FirstIf#= 0 IfCount= 2 Cls=02(comm.) Sub=0e Prot=00 +I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=0e Prot=00 Driver=cdc_mbim +E: Ad=81(I) Atr=03(Int.) MxPS= 64 Ivl=32ms +I: If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim +I:* If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim +E: Ad=8e(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms +E: Ad=0f(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms +I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=40 Driver=(none) +E: Ad=83(I) Atr=03(Int.) MxPS= 10 Ivl=32ms +E: Ad=82(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms +E: Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms + +T: Bus=04 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 3 Spd=5000 MxCh= 0 +D: Ver= 3.20 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs= 1 +P: Vendor=413c ProdID=8215 Rev= 5.04 +S: Manufacturer=Fibocom Wireless Inc. +S: Product=Fibocom FM101-GL Module +S: SerialNumber=a3b7cbf0 +C:* #Ifs= 3 Cfg#= 1 Atr=a0 MxPwr=896mA +A: FirstIf#= 0 IfCount= 2 Cls=02(comm.) Sub=0e Prot=00 +I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=0e Prot=00 Driver=cdc_mbim +E: Ad=81(I) Atr=03(Int.) MxPS= 64 Ivl=32ms +I: If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim +I:* If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim +E: Ad=8e(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms +E: Ad=0f(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms +I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=40 Driver=(none) +E: Ad=83(I) Atr=03(Int.) MxPS= 10 Ivl=32ms +E: Ad=82(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms +E: Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms + +Signed-off-by: Puliang Lu +Cc: stable@vger.kernel.org +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/serial/option.c | 5 +++++ + 1 file changed, 5 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -203,6 +203,9 @@ static void option_instat_callback(struc + #define DELL_PRODUCT_5829E_ESIM 0x81e4 + #define DELL_PRODUCT_5829E 0x81e6 + ++#define DELL_PRODUCT_FM101R 0x8213 ++#define DELL_PRODUCT_FM101R_ESIM 0x8215 ++ + #define KYOCERA_VENDOR_ID 0x0c88 + #define KYOCERA_PRODUCT_KPC650 0x17da + #define KYOCERA_PRODUCT_KPC680 0x180a +@@ -1108,6 +1111,8 @@ static const struct usb_device_id option + .driver_info = RSVD(0) | RSVD(6) }, + { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5829E_ESIM), + .driver_info = RSVD(0) | RSVD(6) }, ++ { USB_DEVICE_INTERFACE_CLASS(DELL_VENDOR_ID, DELL_PRODUCT_FM101R, 0xff) }, ++ { USB_DEVICE_INTERFACE_CLASS(DELL_VENDOR_ID, DELL_PRODUCT_FM101R_ESIM, 0xff) }, + { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) }, /* ADU-E100, ADU-310 */ + { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) }, + { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_620UW) }, diff --git a/queue-4.19/usb-serial-option-add-telit-le910c4-wwx-0x1035-composition.patch b/queue-4.19/usb-serial-option-add-telit-le910c4-wwx-0x1035-composition.patch new file mode 100644 index 00000000000..def35ca980c --- /dev/null +++ b/queue-4.19/usb-serial-option-add-telit-le910c4-wwx-0x1035-composition.patch @@ -0,0 +1,53 @@ +From 6a7be48e9bd18d309ba25c223a27790ad1bf0fa3 Mon Sep 17 00:00:00 2001 +From: Fabio Porcedda +Date: Tue, 5 Sep 2023 09:37:24 +0200 +Subject: USB: serial: option: add Telit LE910C4-WWX 0x1035 composition + +From: Fabio Porcedda + +commit 6a7be48e9bd18d309ba25c223a27790ad1bf0fa3 upstream. + +Add support for the following Telit LE910C4-WWX composition: + +0x1035: TTY, TTY, ECM + +T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 5 Spd=480 MxCh= 0 +D: Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1 +P: Vendor=1bc7 ProdID=1035 Rev=00.00 +S: Manufacturer=Telit +S: Product=LE910C4-WWX +S: SerialNumber=e1b117c7 +C: #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=500mA +I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=option +E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=81(I) Atr=03(Int.) MxPS= 64 Ivl=2ms +E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +I: If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=fe Prot=ff Driver=option +E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=83(I) Atr=03(Int.) MxPS= 64 Ivl=2ms +E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +I: If#= 2 Alt= 0 #EPs= 1 Cls=02(commc) Sub=06 Prot=00 Driver=cdc_ether +E: Ad=85(I) Atr=03(Int.) MxPS= 64 Ivl=2ms +I: If#= 3 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether +E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms + +Signed-off-by: Fabio Porcedda +Cc: stable@vger.kernel.org +Reviewed-by: Daniele Palmas +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/serial/option.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -1290,6 +1290,7 @@ static const struct usb_device_id option + .driver_info = NCTRL(0) | RSVD(3) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1033, 0xff), /* Telit LE910C1-EUX (ECM) */ + .driver_info = NCTRL(0) }, ++ { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1035, 0xff) }, /* Telit LE910C4-WWX (ECM) */ + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE922_USBCFG0), + .driver_info = RSVD(0) | RSVD(1) | NCTRL(2) | RSVD(3) }, + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE922_USBCFG1),