| From 417e96ade664b0d79c81ceaf458f3315355eb6ef Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 27 Apr 2021 10:12:26 +0800 |
| Subject: tty: serial: fsl_lpuart: fix the potential risk of division or modulo |
| by zero |
| |
| From: Sherry Sun <sherry.sun@nxp.com> |
| |
| [ Upstream commit fcb10ee27fb91b25b68d7745db9817ecea9f1038 ] |
| |
| We should be very careful about the register values that will be used |
| for division or modulo operations, althrough the possibility that the |
| UARTBAUD register value is zero is very low, but we had better to deal |
| with the "bad data" of hardware in advance to avoid division or modulo |
| by zero leading to undefined kernel behavior. |
| |
| Signed-off-by: Sherry Sun <sherry.sun@nxp.com> |
| Link: https://lore.kernel.org/r/20210427021226.27468-1-sherry.sun@nxp.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/tty/serial/fsl_lpuart.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c |
| index 9c78e43e669d..4cad2ac00e9f 100644 |
| --- a/drivers/tty/serial/fsl_lpuart.c |
| +++ b/drivers/tty/serial/fsl_lpuart.c |
| @@ -2404,6 +2404,9 @@ lpuart32_console_get_options(struct lpuart_port *sport, int *baud, |
| |
| bd = lpuart32_read(&sport->port, UARTBAUD); |
| bd &= UARTBAUD_SBR_MASK; |
| + if (!bd) |
| + return; |
| + |
| sbr = bd; |
| uartclk = lpuart_get_baud_clk_rate(sport); |
| /* |
| -- |
| 2.30.2 |
| |