]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 30 Nov 2023 14:36:51 +0000 (14:36 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 30 Nov 2023 14:36:51 +0000 (14:36 +0000)
added patches:
s390-dasd-protect-device-queue-against-concurrent-access.patch
usb-serial-option-add-luat-air72-u-series-products.patch

queue-4.14/s390-dasd-protect-device-queue-against-concurrent-access.patch [new file with mode: 0644]
queue-4.14/series
queue-4.14/usb-serial-option-add-luat-air72-u-series-products.patch [new file with mode: 0644]

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 (file)
index 0000000..0d4bfd8
--- /dev/null
@@ -0,0 +1,69 @@
+From db46cd1e0426f52999d50fa72cfa97fa39952885 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jan=20H=C3=B6ppner?= <hoeppner@linux.ibm.com>
+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 <hoeppner@linux.ibm.com>
+
+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:  <stable@vger.kernel.org>
+Fixes: 4fa52aa7a82f ("[S390] dasd: add enhanced DASD statistics interface")
+Reviewed-by: Stefan Haberland <sth@linux.ibm.com>
+Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
+Signed-off-by: Stefan Haberland <sth@linux.ibm.com>
+Link: https://lore.kernel.org/r/20231025132437.1223363-3-sth@linux.ibm.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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);
+ }
index 3e99e033621d0f025a1c180599e28b2e28c03c4c..f8f22f49c5a6f8f83a8efd55dde5507aeaa21ddf 100644 (file)
@@ -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 (file)
index 0000000..7511f6a
--- /dev/null
@@ -0,0 +1,68 @@
+From da90e45d5afc4da2de7cd3ea7943d0f1baa47cc2 Mon Sep 17 00:00:00 2001
+From: Asuna Yang <spriteovo@gmail.com>
+Date: Wed, 22 Nov 2023 22:18:03 +0800
+Subject: USB: serial: option: add Luat Air72*U series products
+
+From: Asuna Yang <spriteovo@gmail.com>
+
+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 <cyy@cyyself.name>
+Signed-off-by: Yangyu Chen <cyy@cyyself.name>
+Signed-off-by: Asuna Yang <SpriteOvO@gmail.com>
+Cc: stable@vger.kernel.org
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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);