From nobody Fri Sep 25 16:50:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A5DC9489FDF; Thu, 10 Sep 2026 13:08:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789045710; cv=none; b=VKjpLif9E2b95XHSJptI/DkFb69hgajSGn8ePB2zJU1Yc4SyORijTyIbib2LbjZsxG+D65IQA6Z4mk+YJXuGlNhvlpemFj3IlDTA6d2h51FaTZBOn6dvukruFRN0zO5zLUjBODflPshizXnpp4mkNCavnx9bpfAMXxKxpJK35Hw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789045710; c=relaxed/simple; bh=lBtOJIb7Kc0Iam5UO9c1m2KgSwt+sSLgyO5xLNlBBgw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eZtrydMUPAPuS1kL3VrrUP03XKuAO1gp5t6FlPdtJ7MeINXqgArYltPXvSJcZ9MVqsFIdfLbyZ/o6lPEGNER+sr/5n58eBL/b+VUfCojRrX90cDEV12+92sEjxrOeEA+wltPUnGa3igchKILI3/xmhyd9GIKFYwHGFPxWjsACLE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=fAkX6wOH; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="fAkX6wOH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 54E4C1F00898; Thu, 10 Sep 2026 13:08:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789045708; bh=G4dCRdwBUSbRtc9Y1vVz7FgABZy+LqLIXpUwJsa0vFo=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=fAkX6wOHnY8UcG7hcxTrPhnTp9M5OLGIqR2AAGK8C/C7xvNrObrKd8bRUqW8pDF26 3OKeu+addcoWUR+EShRvPme4P2gh3imE00Zm4qeTpzLYY5sALpeDETP4A71GUTLt0f jODiiasaKO8xEqy6u4+Rxr9b6X7QLEl/rqiekz/xlfxsT50dFl9Rit1AX+tpv7zqrd x9s6fHc8/RRWJJ7Zqo+xxkYMEvi6qKuwxpXbdgrs2wU5vEZMy+XzsLjuLzADdEvZ9L FiSif18X2uAMZRXjRjYK0EXGR81io7him8UrOmyaDI/pnqd+tT99Pkwn5l2IZc4gc+ y48xol40nK5GQ== Received: from johan by xi.lan with local (Exim 4.99.4) (envelope-from ) id 1x4eVt-00000002hCd-49Ms; Thu, 10 Sep 2026 15:08:25 +0200 From: Johan Hovold To: Greg Kroah-Hartman , Jiri Slaby Cc: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold , stable@vger.kernel.org Subject: [PATCH v4 1/4] serial: revert guards in uart_wait_modem_status() Date: Thu, 10 Sep 2026 15:08:13 +0200 Message-ID: <20260910130816.642699-2-johan@kernel.org> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260910130816.642699-1-johan@kernel.org> References: <20260910130816.642699-1-johan@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Mixing scope-based and regular cleanup is discouraged and uart_port_deref() used by uart_wait_modem_status() falls in the latter category. Revert the guard conversion in preparation for fixing a hangup race. Fixes: 56609c050051 ("serial: serial_core: use guard()s") Cc: stable@vger.kernel.org # 6.18 Cc: Jiri Slaby (SUSE) Signed-off-by: Johan Hovold --- drivers/tty/serial/serial_core.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_c= ore.c index 95774b0f1484..1553bc6cbe7b 100644 --- a/drivers/tty/serial/serial_core.c +++ b/drivers/tty/serial/serial_core.c @@ -1213,15 +1213,16 @@ static int uart_wait_modem_status(struct uart_state= *state, unsigned long arg) uport =3D uart_port_ref(state); if (!uport) return -EIO; - scoped_guard(uart_port_lock_irq, uport) { - memcpy(&cprev, &uport->icount, sizeof(struct uart_icount)); - uart_enable_ms(uport); - } + uart_port_lock_irq(uport); + memcpy(&cprev, &uport->icount, sizeof(struct uart_icount)); + uart_enable_ms(uport); + uart_port_unlock_irq(uport); =20 add_wait_queue(&port->delta_msr_wait, &wait); for (;;) { - scoped_guard(uart_port_lock_irq, uport) - memcpy(&cnow, &uport->icount, sizeof(struct uart_icount)); + uart_port_lock_irq(uport); + memcpy(&cnow, &uport->icount, sizeof(struct uart_icount)); + uart_port_unlock_irq(uport); =20 set_current_state(TASK_INTERRUPTIBLE); =20 --=20 2.55.0 From nobody Fri Sep 25 16:50:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A5BF047D937; Thu, 10 Sep 2026 13:08:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789045710; cv=none; b=UNikXQyjQqOd+N4823xqrEQNeH5s5xO2IcZwLodRkCA6N1JAHtTTSnEJRQKx+bgx+F6c3m509cTgsLvjPBa4zyXqwjgA0qnX3V3dBR/5G/g9QPV2Z4eUaxqIsj36xKyQifr9vNxVQLT0NPLkVW5a9vbgAKb3XxD2KWJS+7xP4zg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789045710; c=relaxed/simple; bh=7Sf219SBMBIoNX+uta/5SIML5xwHKgiCYaKlSbo7OsQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=no0bN9ijkynU57kde6eLGAzUdJFco7ioeMeCEJSRWqS4ssNAmA8mQnIl0D/EOPNH6xb12dxuXWlsPD2Gwj4dxT40ZNlLrw+3Rx3m8l4gQOrlSClodq7MBtZ7Js2z9ykA26z8tP6L1lYEuxAapsqH9pdTwGIfM3+edLpPFsZ4Olk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=c7HNQtwe; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="c7HNQtwe" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 50DE11F000FF; Thu, 10 Sep 2026 13:08:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789045708; bh=Ui4F1VkpBaEZyC0gBYNTL3IsB7lD8TzpkDFInVEz5/w=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=c7HNQtweifsoMKhqIgbdVmvDkfKj/DOaeR+/hCau0+O4c/5cglrog4QK8MU4knnLM P+1dQYdzmqP6AtKrtt1ywaK0u/JrtFz51a54umvT04PxdE81NnSxVCuGz0P32LkJoK EKWppD5TjpV6Gajlt0jtsJc65toEsB5IOWdX+/ZOVYB29mptP9V2W2mvzhjhYvo0XK Lhpa+ZiVWHx/6lYXK8uUGWIU0eKaE7Mpf7oO5QFPzRucXkkBhVbVaqxsxjb3RcI+Bf ys2m2a98S2n7HPJjW40IzvyNhzBsVxw1NK9qMBm21Jane35+1ux+WVmhZ3UKMl5Djm R0h5henAcAyiA== Received: from johan by xi.lan with local (Exim 4.99.4) (envelope-from ) id 1x4eVu-00000002hCf-008J; Thu, 10 Sep 2026 15:08:26 +0200 From: Johan Hovold To: Greg Kroah-Hartman , Jiri Slaby Cc: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold , stable@vger.kernel.org Subject: [PATCH v4 2/4] serial: fix ioctl hangup race Date: Thu, 10 Sep 2026 15:08:14 +0200 Message-ID: <20260910130816.642699-3-johan@kernel.org> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260910130816.642699-1-johan@kernel.org> References: <20260910130816.642699-1-johan@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The tty ioctls can race with hangup and end up calling into a tty driver for a device that is already gone or powered down. Add the missing checks to make sure the port has not been hung up before accessing the hardware to avoid issues like kernel panic due to unclocked accesses. Note that TIOCGSERIAL, TIOCGICOUNT do not access hardware and are therefore not affected by the race. Also note that the initialised check in uart_set_ldisc() added by commit 2f70e49ed860 ("serial_core: Check for port state when tty is in error state") should have been done under the port lock to avoid racing with uart_do_autoconfig(). Fixes: 04f378b198da ("tty: BKL pushdown") Cc: stable@vger.kernel.org # 2.6.26 Signed-off-by: Johan Hovold --- drivers/tty/serial/serial_core.c | 41 ++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_c= ore.c index 1553bc6cbe7b..139b93876229 100644 --- a/drivers/tty/serial/serial_core.c +++ b/drivers/tty/serial/serial_core.c @@ -896,7 +896,7 @@ static int uart_set_info(struct tty_struct *tty, struct= tty_port *port, upf_t old_flags, new_flags; int retval; =20 - if (!uport) + if (!uport || tty_io_error(tty)) return -EIO; =20 new_port =3D new_info->port; @@ -1119,7 +1119,7 @@ static int uart_break_ctl(struct tty_struct *tty, int= break_state) guard(mutex)(&port->mutex); =20 uport =3D uart_port_check(state); - if (!uport) + if (!uport || tty_io_error(tty)) return -EIO; =20 if (uport->type !=3D PORT_UNKNOWN && uport->ops->break_ctl) @@ -1144,7 +1144,7 @@ static int uart_do_autoconfig(struct tty_struct *tty,= struct uart_state *state) */ scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &port->mutex) { uport =3D uart_port_check(state); - if (!uport) + if (!uport || tty_io_error(tty)) return -EIO; =20 if (tty_port_users(port) !=3D 1) @@ -1199,7 +1199,7 @@ static void uart_enable_ms(struct uart_port *uport) * FIXME: This wants extracting into a common all driver implementation * of TIOCMWAIT using tty_port. */ -static int uart_wait_modem_status(struct uart_state *state, unsigned long = arg) +static int uart_wait_modem_status(struct tty_struct *tty, struct uart_stat= e *state, unsigned long arg) { struct uart_port *uport; struct tty_port *port =3D &state->port; @@ -1213,11 +1213,21 @@ static int uart_wait_modem_status(struct uart_state= *state, unsigned long arg) uport =3D uart_port_ref(state); if (!uport) return -EIO; + + mutex_lock(&port->mutex); + if (tty_io_error(tty)) { + mutex_unlock(&port->mutex); + ret =3D -EIO; + goto out_deref; + } + uart_port_lock_irq(uport); memcpy(&cprev, &uport->icount, sizeof(struct uart_icount)); uart_enable_ms(uport); uart_port_unlock_irq(uport); =20 + mutex_unlock(&port->mutex); + add_wait_queue(&port->delta_msr_wait, &wait); for (;;) { uart_port_lock_irq(uport); @@ -1246,6 +1256,7 @@ static int uart_wait_modem_status(struct uart_state *= state, unsigned long arg) } __set_current_state(TASK_RUNNING); remove_wait_queue(&port->delta_msr_wait, &wait); +out_deref: uart_port_deref(uport); =20 return ret; @@ -1568,7 +1579,7 @@ uart_ioctl(struct tty_struct *tty, unsigned int cmd, = unsigned long arg) =20 /* This should only be used when the hardware is present. */ if (cmd =3D=3D TIOCMIWAIT) - return uart_wait_modem_status(state, arg); + return uart_wait_modem_status(tty, state, arg); =20 /* rs485_config requires more locking than others */ if (cmd =3D=3D TIOCSRS485) @@ -1624,14 +1635,13 @@ static void uart_set_ldisc(struct tty_struct *tty) { struct uart_state *state =3D tty->driver_data; struct uart_port *uport; - struct tty_port *port =3D &state->port; - - if (!tty_port_initialized(port)) - return; =20 guard(mutex)(&state->port.mutex); uport =3D uart_port_check(state); - if (uport && uport->ops->set_ldisc) + if (!uport || tty_io_error(tty)) + return; + + if (uport->ops->set_ldisc) uport->ops->set_ldisc(uport, &tty->termios); } =20 @@ -1647,7 +1657,7 @@ static void uart_set_termios(struct tty_struct *tty, guard(mutex)(&state->port.mutex); =20 uport =3D uart_port_check(state); - if (!uport) + if (!uport || tty_io_error(tty)) return; =20 /* @@ -1799,7 +1809,14 @@ static void uart_wait_until_sent(struct tty_struct *= tty, int timeout) * 'timeout' / 'expire' give us the maximum amount of time * we wait. */ - while (!port->ops->tx_empty(port)) { + for (;;) { + mutex_lock(&state->port.mutex); + if (tty_io_error(tty) || port->ops->tx_empty(port)) { + mutex_unlock(&state->port.mutex); + break; + } + mutex_unlock(&state->port.mutex); + msleep_interruptible(jiffies_to_msecs(char_time)); if (signal_pending(current)) break; --=20 2.55.0 From nobody Fri Sep 25 16:50:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A5CB2489FDD; Thu, 10 Sep 2026 13:08:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789045710; cv=none; b=Ts2Gobd01TBIxg+IAYrQfyHgh8xRsM9ALDiSndoI+xQoBnzMDA1R1l5gXsNCg/xNeR0OgensPIWGp+0D9RsgUwSSZ/2ty9TcLvxzNDVMWzlXUgVC+UwSZgCQalYBS046rUHVyvG30TgLcOABRsDLuhxlBAYqkDgtEnrPL/AyFkY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789045710; c=relaxed/simple; bh=K5LRS21eAEywaCwpWTP9zNQuF5OgFrmxKq4jTgK+Cls=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rW2g0zK9oRxu/b6FrNDF1TFXtFXi6XboKLeOoxMMuenF0yIiznKKlW5LnIuBEGwptErLXMSBcAQCSGclc8Lza+sAcqfrHocSq29w5APP+nSGCmm0xHYubla2cHBAWwKddkkXV55gv5EgFNe84V7h19+mFGxpd0Ktu0R2wX7/EXI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=VwMqJEZR; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="VwMqJEZR" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 599121F0089A; Thu, 10 Sep 2026 13:08:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789045708; bh=kh6o93YAq1wBdd148BhlQAfURtXlXRfV6euq7y3I5Tg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=VwMqJEZRa3v/oTJWB1UMPfW8B6uhs7e8HRprGxAkUKRNyRhG1zDoWalbo+HSeVGai YqwGdqDFEn839Kf+gweF+LCDaioBPQkjlfNxVImwlgoK0uRaf8Ni4Vz9Ie5iXBzBuu hxtvwh8a++9QGjorSWld2fZTntfoO+ViFQ03MOiBv2cG42CP/gs4x0t4sHXJhrXHdP dPDSWR+ggpQQUzegl33yPIqv9PKa0MBaq0PF/o+C2JtzAdQTzq1v29t3ECF3Mg9JYN Ow48rShfcURtMguqTGaVM+A2SkIzooMdUxAbSsudvHW2jjOF/l/qFZuD7q+xpUfnv2 yk2vRuUXNP7yg== Received: from johan by xi.lan with local (Exim 4.99.4) (envelope-from ) id 1x4eVu-00000002hCh-02cu; Thu, 10 Sep 2026 15:08:26 +0200 From: Johan Hovold To: Greg Kroah-Hartman , Jiri Slaby Cc: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold , sashiko-bot@kernel.org, stable@vger.kernel.org Subject: [PATCH v4 3/4] serial: fix TIOCMIWAIT race Date: Thu, 10 Sep 2026 15:08:15 +0200 Message-ID: <20260910130816.642699-4-johan@kernel.org> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260910130816.642699-1-johan@kernel.org> References: <20260910130816.642699-1-johan@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The task state must be updated before checking the wakeup condition to avoid missing a racing modem status update. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Reported-by: sashiko-bot@kernel.org Link: https://lore.kernel.org/r/20260904115542.E20D11F00A3D@smtp.kernel.org Cc: stable@vger.kernel.org Signed-off-by: Johan Hovold --- drivers/tty/serial/serial_core.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_c= ore.c index 139b93876229..f7b30f77b231 100644 --- a/drivers/tty/serial/serial_core.c +++ b/drivers/tty/serial/serial_core.c @@ -1230,12 +1230,12 @@ static int uart_wait_modem_status(struct tty_struct= *tty, struct uart_state *sta =20 add_wait_queue(&port->delta_msr_wait, &wait); for (;;) { + set_current_state(TASK_INTERRUPTIBLE); + uart_port_lock_irq(uport); memcpy(&cnow, &uport->icount, sizeof(struct uart_icount)); uart_port_unlock_irq(uport); =20 - set_current_state(TASK_INTERRUPTIBLE); - if (((arg & TIOCM_RNG) && (cnow.rng !=3D cprev.rng)) || ((arg & TIOCM_DSR) && (cnow.dsr !=3D cprev.dsr)) || ((arg & TIOCM_CD) && (cnow.dcd !=3D cprev.dcd)) || --=20 2.55.0 From nobody Fri Sep 25 16:50:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A5F9A48A2CC; Thu, 10 Sep 2026 13:08:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789045711; cv=none; b=N3v71cpBo53spa4r9WigNQVAvZ4hblrO8Mv8e3P+NpPmz2loOtnYiBW6srlwJdlNWStJcCQ3XbJo4g3D8yh9cFUNnQ98UeTxFiUYU9uI/gd1K1XZKJnmMGogj8t0P3uC6SSK/joWf6S8CYMBSc24DqbcSYTrTAUk2b4MGt5jSDc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789045711; c=relaxed/simple; bh=T0eDH7EZA4xtoy/k/cA/kR66PSALuZ5xMZugpP97LwM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YRWIEk3WBFr5cx5DWlLL3765dJBoJI+NHQEDzfJsCsqHXZPBCR+XAqgGTkOLZtpCeba7+hg1BVFOlmNklBevJflLqm+aMu2OQIZpZwxkv+16z7ZpwSmN+X9TsAQ0E2n5w3pia6OXq11rAOeOI6utIeuIm24iez7SFpnXKMyUgp0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=gbM0YamC; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="gbM0YamC" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 52C851F00893; Thu, 10 Sep 2026 13:08:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789045708; bh=QR/jT8+fh8O4lU8TXCcsWfuRox1z2vMh4P/ANZ/SU8U=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=gbM0YamCytcQCQj64jxlAxLY6xLOs2nmQ6S4jejaNNWpnl96UWzw8me3PMJYX8fDV Xt/blsqXftHLyjclhPDR65ITj9q/Bv+ZPVbtL0c7N4p+l4bEi0/i8LYtxe+wQ9DBAE y4t78GG0YlqUlO3MPrvaiHzA2W9UeFc2+JuMl4a2b/Tig30ImPmY0PxMLpgvgHgUQ8 DuRXWbrQjpvvRzsakCltw72byWBbuOGiIcUQ9FZnc/H2ccDS187diawVjABRwJlhDU S+UjwfooeD5typIrTkstTzLHZ6+2Is2KmzrDPtbUk1K/1HYYLYywI1iLwfSh1gUJf2 x70h27X0OMmSQ== Received: from johan by xi.lan with local (Exim 4.99.4) (envelope-from ) id 1x4eVu-00000002hCj-05C1; Thu, 10 Sep 2026 15:08:26 +0200 From: Johan Hovold To: Greg Kroah-Hartman , Jiri Slaby Cc: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold , sashiko-bot@kernel.org, stable@vger.kernel.org Subject: [PATCH v4 4/4] serial: abort TIOCMIWAIT on hangup Date: Thu, 10 Sep 2026 15:08:16 +0200 Message-ID: <20260910130816.642699-5-johan@kernel.org> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260910130816.642699-1-johan@kernel.org> References: <20260910130816.642699-1-johan@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add the missing hangup check to the TIOCMIWAIT wait loop to avoid going back to sleep (indefinitely) after being woken on hangup. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Reported-by: sashiko-bot@kernel.org Link: https://lore.kernel.org/r/20260904115542.E20D11F00A3D@smtp.kernel.org Cc: stable@vger.kernel.org Signed-off-by: Johan Hovold --- drivers/tty/serial/serial_core.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_c= ore.c index f7b30f77b231..33c8f3b6ac81 100644 --- a/drivers/tty/serial/serial_core.c +++ b/drivers/tty/serial/serial_core.c @@ -1244,6 +1244,11 @@ static int uart_wait_modem_status(struct tty_struct = *tty, struct uart_state *sta break; } =20 + if (tty_io_error(tty)) { + ret =3D -EIO; + break; + } + schedule(); =20 /* see if a signal did it */ --=20 2.55.0