_lpuart_serial_setbrg(), _lpuart32_serial_setbrg_7ulp(), and _lpuart32_serial_setbrg() all divide by baudrate without validating it first. If baudrate is zero due to misconfiguration or an uninitialized value, this can cause a division-by-zero.
As a safety measure, add an early return when baudrate is zero in all three functions. Signed-off-by: Naveen Kumar Chaudhary <[email protected]> --- drivers/serial/serial_lpuart.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/serial/serial_lpuart.c b/drivers/serial/serial_lpuart.c index 9fdb6503085..76646e856fc 100644 --- a/drivers/serial/serial_lpuart.c +++ b/drivers/serial/serial_lpuart.c @@ -155,6 +155,9 @@ static void _lpuart_serial_setbrg(struct udevice *dev, u16 sbr; int ret; + if (!baudrate) + return; + if (CONFIG_IS_ENABLED(CLK)) { ret = get_lpuart_clk_rate(dev, &clk); if (ret) @@ -245,6 +248,9 @@ static void _lpuart32_serial_setbrg_7ulp(struct udevice *dev, u32 clk; int ret; + if (!baudrate) + return; + if (CONFIG_IS_ENABLED(CLK)) { ret = get_lpuart_clk_rate(dev, &clk); if (ret) @@ -314,6 +320,9 @@ static void _lpuart32_serial_setbrg(struct udevice *dev, u32 sbr; int ret; + if (!baudrate) + return; + if (CONFIG_IS_ENABLED(CLK)) { ret = get_lpuart_clk_rate(dev, &clk); if (ret) -- 2.43.0

