]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
watchdog: airoha: Prevent division by zero when clock frequency is zero
authorWayen Yan <win847@gmail.com>
Wed, 8 Jul 2026 02:41:54 +0000 (10:41 +0800)
committerGuenter Roeck <linux@roeck-us.net>
Wed, 8 Jul 2026 14:08:50 +0000 (07:08 -0700)
clk_get_rate() can return 0 when the clock provider is not properly
configured or the clock is unmanaged. The driver uses wdt_freq as a
divisor directly in airoha_wdt_probe() to compute max_timeout and in
airoha_wdt_get_timeleft() to compute the remaining time, which results
in a division by zero.

Add a check for wdt_freq == 0 in probe and return -EINVAL with
dev_err_probe() to prevent the division by zero and provide a
diagnostic message.

Fixes: 3cf67f3769b8 ("watchdog: Add support for Airoha EN7851 watchdog")
Signed-off-by: Wayen Yan <win847@gmail.com>
Link: https://lore.kernel.org/r/178347932594.81327.4834644880399144119@gmail.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
drivers/watchdog/airoha_wdt.c

index dc8ca11c14d81a58d2153caf83b9ea9f1edb2390..4bd333189b87eceb731641121f8d5133c4d161f6 100644 (file)
@@ -147,6 +147,9 @@ static int airoha_wdt_probe(struct platform_device *pdev)
 
        /* Watchdog ticks at half the bus rate */
        airoha_wdt->wdt_freq = clk_get_rate(bus_clk) / 2;
+       if (!airoha_wdt->wdt_freq)
+               return dev_err_probe(dev, -EINVAL,
+                                    "invalid clock frequency\n");
 
        /* Initialize struct watchdog device */
        wdog_dev = &airoha_wdt->wdog_dev;