]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 25 Sep 2022 07:40:20 +0000 (09:40 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 25 Sep 2022 07:40:20 +0000 (09:40 +0200)
added patches:
s390-dasd-fix-oops-in-dasd_alias_get_start_dev-due-to-missing-pavgroup.patch
serial-create-uart_xmit_advance.patch
serial-tegra-use-uart_xmit_advance-fixes-icount.tx-accounting.patch

queue-4.14/s390-dasd-fix-oops-in-dasd_alias_get_start_dev-due-to-missing-pavgroup.patch [new file with mode: 0644]
queue-4.14/serial-create-uart_xmit_advance.patch [new file with mode: 0644]
queue-4.14/serial-tegra-use-uart_xmit_advance-fixes-icount.tx-accounting.patch [new file with mode: 0644]
queue-4.14/series

diff --git a/queue-4.14/s390-dasd-fix-oops-in-dasd_alias_get_start_dev-due-to-missing-pavgroup.patch b/queue-4.14/s390-dasd-fix-oops-in-dasd_alias_get_start_dev-due-to-missing-pavgroup.patch
new file mode 100644 (file)
index 0000000..750f097
--- /dev/null
@@ -0,0 +1,59 @@
+From db7ba07108a48c0f95b74fabbfd5d63e924f992d Mon Sep 17 00:00:00 2001
+From: Stefan Haberland <sth@linux.ibm.com>
+Date: Mon, 19 Sep 2022 17:49:31 +0200
+Subject: s390/dasd: fix Oops in dasd_alias_get_start_dev due to missing pavgroup
+
+From: Stefan Haberland <sth@linux.ibm.com>
+
+commit db7ba07108a48c0f95b74fabbfd5d63e924f992d upstream.
+
+Fix Oops in dasd_alias_get_start_dev() function caused by the pavgroup
+pointer being NULL.
+
+The pavgroup pointer is checked on the entrance of the function but
+without the lcu->lock being held. Therefore there is a race window
+between dasd_alias_get_start_dev() and _lcu_update() which sets
+pavgroup to NULL with the lcu->lock held.
+
+Fix by checking the pavgroup pointer with lcu->lock held.
+
+Cc: <stable@vger.kernel.org> # 2.6.25+
+Fixes: 8e09f21574ea ("[S390] dasd: add hyper PAV support to DASD device driver, part 1")
+Signed-off-by: Stefan Haberland <sth@linux.ibm.com>
+Reviewed-by: Jan Hoeppner <hoeppner@linux.ibm.com>
+Link: https://lore.kernel.org/r/20220919154931.4123002-2-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_alias.c |    9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+--- a/drivers/s390/block/dasd_alias.c
++++ b/drivers/s390/block/dasd_alias.c
+@@ -675,12 +675,12 @@ int dasd_alias_remove_device(struct dasd
+ struct dasd_device *dasd_alias_get_start_dev(struct dasd_device *base_device)
+ {
+       struct dasd_eckd_private *alias_priv, *private = base_device->private;
+-      struct alias_pav_group *group = private->pavgroup;
+       struct alias_lcu *lcu = private->lcu;
+       struct dasd_device *alias_device;
++      struct alias_pav_group *group;
+       unsigned long flags;
+-      if (!group || !lcu)
++      if (!lcu)
+               return NULL;
+       if (lcu->pav == NO_PAV ||
+           lcu->flags & (NEED_UAC_UPDATE | UPDATE_PENDING))
+@@ -697,6 +697,11 @@ struct dasd_device *dasd_alias_get_start
+       }
+       spin_lock_irqsave(&lcu->lock, flags);
++      group = private->pavgroup;
++      if (!group) {
++              spin_unlock_irqrestore(&lcu->lock, flags);
++              return NULL;
++      }
+       alias_device = group->next;
+       if (!alias_device) {
+               if (list_empty(&group->aliaslist)) {
diff --git a/queue-4.14/serial-create-uart_xmit_advance.patch b/queue-4.14/serial-create-uart_xmit_advance.patch
new file mode 100644 (file)
index 0000000..fd45bdb
--- /dev/null
@@ -0,0 +1,51 @@
+From e77cab77f2cb3a1ca2ba8df4af45bb35617ac16d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= <ilpo.jarvinen@linux.intel.com>
+Date: Thu, 1 Sep 2022 17:39:32 +0300
+Subject: serial: Create uart_xmit_advance()
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
+
+commit e77cab77f2cb3a1ca2ba8df4af45bb35617ac16d upstream.
+
+A very common pattern in the drivers is to advance xmit tail
+index and do bookkeeping of Tx'ed characters. Create
+uart_xmit_advance() to handle it.
+
+Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
+Cc: stable <stable@kernel.org>
+Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
+Link: https://lore.kernel.org/r/20220901143934.8850-2-ilpo.jarvinen@linux.intel.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ include/linux/serial_core.h |   17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
+
+--- a/include/linux/serial_core.h
++++ b/include/linux/serial_core.h
+@@ -298,6 +298,23 @@ struct uart_state {
+ /* number of characters left in xmit buffer before we ask for more */
+ #define WAKEUP_CHARS          256
++/**
++ * uart_xmit_advance - Advance xmit buffer and account Tx'ed chars
++ * @up: uart_port structure describing the port
++ * @chars: number of characters sent
++ *
++ * This function advances the tail of circular xmit buffer by the number of
++ * @chars transmitted and handles accounting of transmitted bytes (into
++ * @up's icount.tx).
++ */
++static inline void uart_xmit_advance(struct uart_port *up, unsigned int chars)
++{
++      struct circ_buf *xmit = &up->state->xmit;
++
++      xmit->tail = (xmit->tail + chars) & (UART_XMIT_SIZE - 1);
++      up->icount.tx += chars;
++}
++
+ struct module;
+ struct tty_driver;
diff --git a/queue-4.14/serial-tegra-use-uart_xmit_advance-fixes-icount.tx-accounting.patch b/queue-4.14/serial-tegra-use-uart_xmit_advance-fixes-icount.tx-accounting.patch
new file mode 100644 (file)
index 0000000..c46407c
--- /dev/null
@@ -0,0 +1,53 @@
+From 754f68044c7dd6c52534ba3e0f664830285c4b15 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= <ilpo.jarvinen@linux.intel.com>
+Date: Thu, 1 Sep 2022 17:39:33 +0300
+Subject: serial: tegra: Use uart_xmit_advance(), fixes icount.tx accounting
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
+
+commit 754f68044c7dd6c52534ba3e0f664830285c4b15 upstream.
+
+DMA complete & stop paths did not correctly account Tx'ed characters
+into icount.tx. Using uart_xmit_advance() fixes the problem.
+
+Fixes: e9ea096dd225 ("serial: tegra: add serial driver")
+Cc: <stable@vger.kernel.org> # serial: Create uart_xmit_advance()
+Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
+Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
+Link: https://lore.kernel.org/r/20220901143934.8850-3-ilpo.jarvinen@linux.intel.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/tty/serial/serial-tegra.c |    5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+--- a/drivers/tty/serial/serial-tegra.c
++++ b/drivers/tty/serial/serial-tegra.c
+@@ -409,7 +409,7 @@ static void tegra_uart_tx_dma_complete(v
+       count = tup->tx_bytes_requested - state.residue;
+       async_tx_ack(tup->tx_dma_desc);
+       spin_lock_irqsave(&tup->uport.lock, flags);
+-      xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE - 1);
++      uart_xmit_advance(&tup->uport, count);
+       tup->tx_in_progress = 0;
+       if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
+               uart_write_wakeup(&tup->uport);
+@@ -493,7 +493,6 @@ static unsigned int tegra_uart_tx_empty(
+ static void tegra_uart_stop_tx(struct uart_port *u)
+ {
+       struct tegra_uart_port *tup = to_tegra_uport(u);
+-      struct circ_buf *xmit = &tup->uport.state->xmit;
+       struct dma_tx_state state;
+       unsigned int count;
+@@ -504,7 +503,7 @@ static void tegra_uart_stop_tx(struct ua
+       dmaengine_tx_status(tup->tx_dma_chan, tup->tx_cookie, &state);
+       count = tup->tx_bytes_requested - state.residue;
+       async_tx_ack(tup->tx_dma_desc);
+-      xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE - 1);
++      uart_xmit_advance(&tup->uport, count);
+       tup->tx_in_progress = 0;
+ }
index 3da7bcb36b03dd2db75c81443a17a149ea6a080f..8efa28c551093cf931aa40f0747cbab2b7a33423 100644 (file)
@@ -32,3 +32,6 @@ netfilter-ebtables-fix-memory-leak-when-blob-is-malf.patch
 can-gs_usb-gs_can_open-fix-race-dev-can.state-condit.patch
 perf-kcore_copy-do-not-check-proc-modules-is-unchang.patch
 net-sunhme-fix-packet-reception-for-len-rx_copy_thre.patch
+serial-create-uart_xmit_advance.patch
+serial-tegra-use-uart_xmit_advance-fixes-icount.tx-accounting.patch
+s390-dasd-fix-oops-in-dasd_alias_get_start_dev-due-to-missing-pavgroup.patch