Re: [PATCH v2 1/2] serial: sh-sci: Avoid divide-by-zero fault
From: Geert Uytterhoeven
Date: Wed Apr 08 2026 - 11:40:29 EST
Hi Biju,
On Wed, 8 Apr 2026 at 16:21, Biju <biju.das.au@xxxxxxxxx> wrote:
> From: Biju Das <biju.das.jz@xxxxxxxxxxxxxx>
>
> uart_update_timeout() computes a timeout value by dividing by the baud
> rate. If baud is zero — which can occur when the hardware returns an
> unsupported or invalid rate — this results in a divide-by-zero fault.
>
> Signed-off-by: Biju Das <biju.das.jz@xxxxxxxxxxxxxx>
Thanks for your patch!
> --- a/drivers/tty/serial/rsci.c
> +++ b/drivers/tty/serial/rsci.c
> @@ -286,7 +286,8 @@ static void rsci_set_termios(struct uart_port *port, struct ktermios *termios,
> sci_port_enable(s);
> uart_port_lock_irqsave(port, &flags);
>
> - uart_update_timeout(port, termios->c_cflag, baud);
> + if (baud)
> + uart_update_timeout(port, termios->c_cflag, baud);
>
> rsci_serial_out(port, CCR0, ccr0_val);
>
> diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
> index 6c819b6b2425..429e89106ee3 100644
> --- a/drivers/tty/serial/sh-sci.c
> +++ b/drivers/tty/serial/sh-sci.c
> @@ -2805,7 +2805,8 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios,
>
> sci_reset(port);
>
> - uart_update_timeout(port, termios->c_cflag, baud);
> + if (baud)
> + uart_update_timeout(port, termios->c_cflag, baud);
Nice catches!
>
> /* byte size and parity */
> bits = tty_get_frame_size(termios->c_cflag);
I think there's another one out of context, which can even trigger with
baud == 75:
s->rx_frame = (10000 * bits) / (baud / 100);
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds