From nobody Sat Sep 26 01:03:38 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 1A701400963; Mon, 7 Sep 2026 06:45:00 +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=1788763502; cv=none; b=YGJBuQe8eQzmMxVh0vpzb0Y4Bs1dydkuE9opAJJbr2U6UDjO8h92orn7t/atBx4aSNkMMsAi0ahAxb6/7bVUsC49NfUrzf3B80r3I/I4DcAnxQCMISS2wCnRYkpimHP4AY17J7PhM8UUoLWTFFrmJ7ctKMaqRZ+ebUGzUOQvyws= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788763502; c=relaxed/simple; bh=5/7mkBg3SXUZmwpNQZbqvDU68kScFEqQw2PSKoYk/7g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=e4z2ga8kXHxBxQAhgOPu8AXw9x6M8iqdAnXs6PXfKEb/j/JV/W0hQ1cnjofuExklSxImEJTqOWEYA7C5lyVrIHS7k1QF0jn8+mvK0EFqCXcSDPf6ipve6vZtatvzd8b9tBN7M5NSr7s5CcfV4ENr6LImTmZd5bTMTSmFuDx6tVA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Eqjv40GE; 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="Eqjv40GE" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A584E1F00ACA; Mon, 7 Sep 2026 06:45:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788763500; bh=p8adRS1Y381PQYv/N8H4PYRUQsR+b+pWo6Uubccta/M=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Eqjv40GEKnuI3korcu4hHzfNtWD3jJCS8h4Czmdlex7Jn2IP5hp3KPQf71UAMPoCt o54NDFobn0R73EFVXSecyEc8Uc5yNNA2ADmfSd2vSpqDTMDd0gzLFXM2XXql+UReSL AJ2KMa+gBcBgifTvz87ZT0DZgujb4okQJwYSkoUF4huur6b/+NqFj9pwfoXS6q+v6u 3fM2Qp9ruvZNq5JbJCPPaHUkWH0Xv2E3ICF+vExr5566SaeCnmijPwWYROf2uK8OQt 9RTucqncaZOGevbvhoj4oMdl+3bnfSALX3mszgHZYdA399Wc/GWB8XI6xud6rIOc6K ZiKG+gtZiSTHQ== Received: from johan by xi.lan with local (Exim 4.99.4) (envelope-from ) id 1x3T69-00000000OC4-3hbG; Mon, 07 Sep 2026 08:44:57 +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 v3 1/4] serial: revert guards in uart_wait_modem_status() Date: Mon, 7 Sep 2026 08:44:15 +0200 Message-ID: <20260907064418.92953-2-johan@kernel.org> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260907064418.92953-1-johan@kernel.org> References: <20260907064418.92953-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 premature 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 Sat Sep 26 01:03:38 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 EA10B40682A; Mon, 7 Sep 2026 06:45:00 +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=1788763502; cv=none; b=D6ImQ4Lxp8wh7UEIJKsxvV0xW/ClfNg8370aD5iF+dqTc3Q0L+aobJYppnPCzQFWPj1U7ElcrzYjaF0RKE8mK6C649q47bVnShm4r2GMOhTkS35bkyCP7XPEzeEw/x9oREXjy/6yilRSzEAOgIo0JdsgVAduFoOqF40CESsmlkI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788763502; c=relaxed/simple; bh=auKLqhMwg3dsI5arYX0V0bGcmqAU8FBqmqwUCuVOO58=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XuH7Z/80+R+yifNPYQ3PEGcYRxAmblsvCTFmIXc15HzPyUSpI4UReDGCDU2G+ppuEenr/FhRIPPtyjEeZHFW1SJW8C+H53ACHQa8s4p1aeyUraGC26M48DY3W1sXL1zLCEHO4eE4aB/yJmJ4FsaqIy2oQTwYL9EkUiotIlaW6XY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=THLXCQUd; 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="THLXCQUd" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 98F921F00A3F; Mon, 7 Sep 2026 06:45:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788763500; bh=5ciWv+qybpfCuW2uA3wmFySIxPMaj+n/n0VME7/q3TE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=THLXCQUds5p9tyRs1jwotE2H1MR3KO7qpL2cQQUO4LAxbIMAggiOlsgChOJoTurjU bKTlfJ/NTzcopQTixOKX+FyZrASh5mr8DNaWvmZh3mtr7AjoqwwO7EQJgEMwW3svpm 3h2TZEMi6Ew8E+pDpwWehyUflPWE2bwoluvWF8uUx4la5c4PZ0ZcGLWc6ppx4HA144 3Zwxd5fFbq5YSGvjrme3DrxraZD0EOeBB42Xp9NPObcnhtzPtFh3BXUV0VU++fqqoM SKylec4q0UEzbXMTPNUsurO4A6gDxqJZjC8czjO9AZ428NUeJUkJ4um6farRxixt7x s769XqNv62S3Q== Received: from johan by xi.lan with local (Exim 4.99.4) (envelope-from ) id 1x3T69-00000000OC6-3kke; Mon, 07 Sep 2026 08:44:57 +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 v3 2/4] serial: fix ioctl hangup race Date: Mon, 7 Sep 2026 08:44:16 +0200 Message-ID: <20260907064418.92953-3-johan@kernel.org> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260907064418.92953-1-johan@kernel.org> References: <20260907064418.92953-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. Fixes: 04f378b198da ("tty: BKL pushdown") Cc: stable@vger.kernel.org # 2.6.26 Signed-off-by: Johan Hovold --- drivers/tty/serial/serial_core.c | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_c= ore.c index 1553bc6cbe7b..4213fa3dc988 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) @@ -1647,7 +1658,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 +1810,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 Sat Sep 26 01:03:38 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 EA19D406834; Mon, 7 Sep 2026 06:45:00 +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=1788763502; cv=none; b=Kb9GZvgJtlNANUKReUnRZrlc2lR0E3r8drURMiB3Kthw2xmkEhrXpzL/hsHIUhSObfx1IahKCw9absf8pueDxynDHfe63OMcS4VoOwwCX8nyy/D2BT7NsWt9motD4URdBeq/SJrEYt7wJRiuCEBbYb6pr7vIf1aSWo+Glo0+Ctc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788763502; c=relaxed/simple; bh=x66OTmE+2GoMrDOkCx9Gp+1mdgvBmhCVWJZ3x+2aW8g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=q5CyAGfrCUKbIrZZsS0DaVVx4hy1pFuhdN5f860Rr8wfDzz11hYlPOSOkMqrx9AmoEJZDCd0ivlZb94UJEzk0fQM++Oey5sDsNZJ006dVv68QZE6Ehbfjggos2W4RFFzAwFlDK6E0qKGrWVzfIKN+3smwYV6wf5SadSSX44YoLY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=DZchNzdW; 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="DZchNzdW" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 94ED81F00A3D; Mon, 7 Sep 2026 06:45:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788763500; bh=uKkl+WCnZ3v7/vev4Fux3tOv4sXrORFW6CikZ1muEWY=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=DZchNzdWPSIUMz5EDTVju2UauvqwvKBgOZwgWylIvokg8chfX4imLvTbQ0D0sswBM VjzM4gd9j61kqcJZ3b1vf2nHuuAGHAqb7VtcjcUdO4Hrfjs7ukXQja01HF0CoJcd8t YVJHQbvz2w68cbA4+clbvgfjilxAP7PFpEeMhE6NneuzvogNZBzHZJ3DPh3gqX+9hx GP0EzGyDbywa/tRRHz14Nggtc5/ZtqJ0y7EBUn1N4jDoGV4nq6Cf1Ss/tNW93ovJmF kgjFnDro1RNiVALjzNMMLRYjpuJsuDd3EK4Z2QM9rqmMI2KL/UxYxbNw2RUS17GQGc WCaT5NK6PqNyw== Received: from johan by xi.lan with local (Exim 4.99.4) (envelope-from ) id 1x3T69-00000000OC8-3nyj; Mon, 07 Sep 2026 08:44:57 +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 v3 3/4] serial: fix TIOCMIWAIT race Date: Mon, 7 Sep 2026 08:44:17 +0200 Message-ID: <20260907064418.92953-4-johan@kernel.org> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260907064418.92953-1-johan@kernel.org> References: <20260907064418.92953-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 4213fa3dc988..c2c2c8fe1a4c 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 Sat Sep 26 01:03:38 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 EA2E04071E3; Mon, 7 Sep 2026 06:45:00 +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=1788763502; cv=none; b=EYQ6lvV5MRAs6QHRr6cFbIHyUI4qRct3w6St19zKbqJy5GJ3jpuNzVKD057cKbFH6mpEVifrxpM51z4xFO55l7slLT4iyCC57glZ1kSi0O2g3GiqLO+4SFoNx7rASb3wrJjmWGk55/g3KbJhpET0NaIE1uisGquTVJ2P8aQ8zmM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788763502; c=relaxed/simple; bh=FkFIFfY5SJigabcSWWhXlaO3fAJU+Vo/qJIley++sNE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=a5vmVEdZFTd/prE+xeA9WX9aYszIbgML4iirE+RfgeZ6GmOCh6ktVtO7go6Ld+6es8+aCdpmcYRST5Zng01kYxBokyOy41K/ArJEDsn76Wi93AHiqxknwC4euS6uOHlWkvGhsQ2ZZaB7AkIhaVyRNV84pAT+m1S30fr7DRZjJzA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=eywWcZwF; 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="eywWcZwF" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9AC941F00AC4; Mon, 7 Sep 2026 06:45:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788763500; bh=LXQTQ/3II3SO4NJRoY1gLUjaK+rJhs2DGgp0+AQspig=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=eywWcZwFfUqWEuURKikHq/qXSwH+/mRxwKYMSba8CGUCWG1R4A3f+999b+ct+jtDG JAxJTAEz6FxWdHP4WR7Cq87mtn70g7/Llb3Oq+IX/bgZot/hFOqUCFz7LxgPECtxrg KXA825mB/cEofcMSAibuvnGsPagHHXgxebrRfqAPTG9kiar+IbBzMgHhkbaHBncWyV zu9/ni86dNQ6i6PJu5y8B9dXHNOgu41/+tq4CIP+E9ymsTrqXBOABOQy8AwgVAh3S6 ujcd/S3Ufs38/JoNzsy1nh0OiOLn4rpxYt7go6x9rDY/4vs13Z6CFFe6ECXEqz4QZG Hb53J3hdvXyZg== Received: from johan by xi.lan with local (Exim 4.99.4) (envelope-from ) id 1x3T69-00000000OCA-3rWo; Mon, 07 Sep 2026 08:44:57 +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 v3 4/4] serial: abort TIOCMIWAIT on hangup Date: Mon, 7 Sep 2026 08:44:18 +0200 Message-ID: <20260907064418.92953-5-johan@kernel.org> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260907064418.92953-1-johan@kernel.org> References: <20260907064418.92953-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 c2c2c8fe1a4c..45d160743ea0 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