From: Greg Kroah-Hartman Date: Thu, 30 Nov 2023 14:36:51 +0000 (+0000) Subject: 4.14-stable patches X-Git-Tag: v5.15.141~22 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a266cc345656e20bf99ea2b3767b1e86a4b3b156;p=thirdparty%2Fkernel%2Fstable-queue.git 4.14-stable patches added patches: s390-dasd-protect-device-queue-against-concurrent-access.patch usb-serial-option-add-luat-air72-u-series-products.patch --- diff --git a/queue-4.14/s390-dasd-protect-device-queue-against-concurrent-access.patch b/queue-4.14/s390-dasd-protect-device-queue-against-concurrent-access.patch new file mode 100644 index 00000000000..0d4bfd81f01 --- /dev/null +++ b/queue-4.14/s390-dasd-protect-device-queue-against-concurrent-access.patch @@ -0,0 +1,69 @@ +From db46cd1e0426f52999d50fa72cfa97fa39952885 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jan=20H=C3=B6ppner?= +Date: Wed, 25 Oct 2023 15:24:37 +0200 +Subject: s390/dasd: protect device queue against concurrent access +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Jan Höppner + +commit db46cd1e0426f52999d50fa72cfa97fa39952885 upstream. + +In dasd_profile_start() the amount of requests on the device queue are +counted. The access to the device queue is unprotected against +concurrent access. With a lot of parallel I/O, especially with alias +devices enabled, the device queue can change while dasd_profile_start() +is accessing the queue. In the worst case this leads to a kernel panic +due to incorrect pointer accesses. + +Fix this by taking the device lock before accessing the queue and +counting the requests. Additionally the check for a valid profile data +pointer can be done earlier to avoid unnecessary locking in a hot path. + +Cc: +Fixes: 4fa52aa7a82f ("[S390] dasd: add enhanced DASD statistics interface") +Reviewed-by: Stefan Haberland +Signed-off-by: Jan Höppner +Signed-off-by: Stefan Haberland +Link: https://lore.kernel.org/r/20231025132437.1223363-3-sth@linux.ibm.com +Signed-off-by: Jens Axboe +Signed-off-by: Greg Kroah-Hartman +--- + drivers/s390/block/dasd.c | 24 +++++++++++++----------- + 1 file changed, 13 insertions(+), 11 deletions(-) + +--- a/drivers/s390/block/dasd.c ++++ b/drivers/s390/block/dasd.c +@@ -721,18 +721,20 @@ static void dasd_profile_start(struct da + * we count each request only once. + */ + device = cqr->startdev; +- if (device->profile.data) { +- counter = 1; /* request is not yet queued on the start device */ +- list_for_each(l, &device->ccw_queue) +- if (++counter >= 31) +- break; +- } ++ if (!device->profile.data) ++ return; ++ ++ spin_lock(get_ccwdev_lock(device->cdev)); ++ counter = 1; /* request is not yet queued on the start device */ ++ list_for_each(l, &device->ccw_queue) ++ if (++counter >= 31) ++ break; ++ spin_unlock(get_ccwdev_lock(device->cdev)); ++ + spin_lock(&device->profile.lock); +- if (device->profile.data) { +- device->profile.data->dasd_io_nr_req[counter]++; +- if (rq_data_dir(req) == READ) +- device->profile.data->dasd_read_nr_req[counter]++; +- } ++ device->profile.data->dasd_io_nr_req[counter]++; ++ if (rq_data_dir(req) == READ) ++ device->profile.data->dasd_read_nr_req[counter]++; + spin_unlock(&device->profile.lock); + } + diff --git a/queue-4.14/series b/queue-4.14/series index 3e99e033621..f8f22f49c5a 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -10,3 +10,5 @@ amd-xgbe-propagate-the-correct-speed-and-duplex-stat.patch net-axienet-fix-check-for-partial-tx-checksum.patch tracing-kprobes-return-eaddrnotavail-when-func-matches-several-symbols.patch mtd-rawnand-brcmnand-fix-ecc-chunk-calculation-for-erased-page-bitfips.patch +s390-dasd-protect-device-queue-against-concurrent-access.patch +usb-serial-option-add-luat-air72-u-series-products.patch diff --git a/queue-4.14/usb-serial-option-add-luat-air72-u-series-products.patch b/queue-4.14/usb-serial-option-add-luat-air72-u-series-products.patch new file mode 100644 index 00000000000..7511f6a934b --- /dev/null +++ b/queue-4.14/usb-serial-option-add-luat-air72-u-series-products.patch @@ -0,0 +1,68 @@ +From da90e45d5afc4da2de7cd3ea7943d0f1baa47cc2 Mon Sep 17 00:00:00 2001 +From: Asuna Yang +Date: Wed, 22 Nov 2023 22:18:03 +0800 +Subject: USB: serial: option: add Luat Air72*U series products + +From: Asuna Yang + +commit da90e45d5afc4da2de7cd3ea7943d0f1baa47cc2 upstream. + +Update the USB serial option driver support for Luat Air72*U series +products. + +ID 1782:4e00 Spreadtrum Communications Inc. UNISOC-8910 + +T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 13 Spd=480 MxCh= 0 +D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 +P: Vendor=1782 ProdID=4e00 Rev=00.00 +S: Manufacturer=UNISOC +S: Product=UNISOC-8910 +C: #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=400mA +I: If#= 0 Alt= 0 #EPs= 1 Cls=e0(wlcon) Sub=01 Prot=03 Driver=rndis_host +E: Ad=82(I) Atr=03(Int.) MxPS= 8 Ivl=4096ms +I: If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host +E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option +E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +I: If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option +E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +I: If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option +E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms + +If#= 2: AT +If#= 3: PPP + AT +If#= 4: Debug + +Co-developed-by: Yangyu Chen +Signed-off-by: Yangyu Chen +Signed-off-by: Asuna Yang +Cc: stable@vger.kernel.org +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/serial/option.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -612,6 +612,8 @@ static void option_instat_callback(struc + #define UNISOC_VENDOR_ID 0x1782 + /* TOZED LT70-C based on UNISOC SL8563 uses UNISOC's vendor ID */ + #define TOZED_PRODUCT_LT70C 0x4055 ++/* Luat Air72*U series based on UNISOC UIS8910 uses UNISOC's vendor ID */ ++#define LUAT_PRODUCT_AIR720U 0x4e00 + + /* Device flags */ + +@@ -2273,6 +2275,7 @@ static const struct usb_device_id option + { 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) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, LUAT_PRODUCT_AIR720U, 0xff, 0, 0) }, + { } /* Terminating entry */ + }; + MODULE_DEVICE_TABLE(usb, option_ids);