From: Greg Kroah-Hartman Date: Mon, 5 Feb 2018 18:01:06 +0000 (-0800) Subject: 4.9-stable patches X-Git-Tag: v3.18.94~9 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5f343336387ac5f56fdbbffc530f1de4e594354b;p=thirdparty%2Fkernel%2Fstable-queue.git 4.9-stable patches added patches: serial-core-mark-port-as-initialized-after-successful-irq-change.patch --- diff --git a/queue-4.9/serial-core-mark-port-as-initialized-after-successful-irq-change.patch b/queue-4.9/serial-core-mark-port-as-initialized-after-successful-irq-change.patch new file mode 100644 index 00000000000..8752785ebab --- /dev/null +++ b/queue-4.9/serial-core-mark-port-as-initialized-after-successful-irq-change.patch @@ -0,0 +1,43 @@ +From 44117a1d1732c513875d5a163f10d9adbe866c08 Mon Sep 17 00:00:00 2001 +From: Sebastian Andrzej Siewior +Date: Thu, 11 Jan 2018 18:57:26 +0100 +Subject: serial: core: mark port as initialized after successful IRQ change + +From: Sebastian Andrzej Siewior + +commit 44117a1d1732c513875d5a163f10d9adbe866c08 upstream. + +setserial changes the IRQ via uart_set_info(). It invokes +uart_shutdown() which free the current used IRQ and clear +TTY_PORT_INITIALIZED. It will then update the IRQ number and invoke +uart_startup() before returning to the caller leaving +TTY_PORT_INITIALIZED cleared. + +The next open will crash with +| list_add double add: new=ffffffff839fcc98, prev=ffffffff839fcc98, next=ffffffff839fcc98. +since the close from the IOCTL won't free the IRQ (and clean the list) +due to the TTY_PORT_INITIALIZED check in uart_shutdown(). + +There is same pattern in uart_do_autoconfig() and I *think* it also +needs to set TTY_PORT_INITIALIZED there. +Is there a reason why uart_startup() does not set the flag by itself +after the IRQ has been acquired (since it is cleared in uart_shutdown)? + +Signed-off-by: Sebastian Andrzej Siewior +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/tty/serial/serial_core.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/tty/serial/serial_core.c ++++ b/drivers/tty/serial/serial_core.c +@@ -965,6 +965,8 @@ static int uart_set_info(struct tty_stru + } + } else { + retval = uart_startup(tty, state, 1); ++ if (retval == 0) ++ tty_port_set_initialized(port, true); + if (retval > 0) + retval = 0; + } diff --git a/queue-4.9/series b/queue-4.9/series index 2b5d8cd9897..f6d225945cb 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -15,3 +15,4 @@ asoc-pcm512x-add-missing-module_description-author-license.patch kaiser-fix-intel_bts-perf-crashes.patch x86-pti-make-unpoison-of-pgd-for-trusted-boot-work-for-real.patch kaiser-allocate-pgd-with-order-0-when-pti-off.patch +serial-core-mark-port-as-initialized-after-successful-irq-change.patch