* [PATCH 0/3] watchdog: Avoid division by zero from clk_get_rate()
@ 2026-09-13 6:48 Tzung-Bi Shih
2026-09-13 6:48 ` [PATCH 1/3] watchdog: digicolor: Avoid division by zero Tzung-Bi Shih
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Tzung-Bi Shih @ 2026-09-13 6:48 UTC (permalink / raw)
To: Wim Van Sebroeck, Guenter Roeck
Cc: Baruch Siach, linux-watchdog, linux-kernel, tzungbi
The series is a follow-up of [1].
[1] https://lore.kernel.org/all/2c0b963e-6379-46a4-bae8-92ec2d76f8da@roeck-us.net
Tzung-Bi Shih (3):
watchdog: digicolor: Avoid division by zero
watchdog: rtd119x: Avoid division by zero
watchdog: rzv2h: Avoid division by zero
drivers/watchdog/digicolor_wdt.c | 13 +++++++++----
drivers/watchdog/rtd119x_wdt.c | 7 ++++++-
drivers/watchdog/rzv2h_wdt.c | 7 ++++++-
3 files changed, 21 insertions(+), 6 deletions(-)
--
2.53.0
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH 1/3] watchdog: digicolor: Avoid division by zero 2026-09-13 6:48 [PATCH 0/3] watchdog: Avoid division by zero from clk_get_rate() Tzung-Bi Shih @ 2026-09-13 6:48 ` Tzung-Bi Shih 2026-09-14 5:46 ` Baruch Siach 2026-09-17 0:27 ` Guenter Roeck 2026-09-13 6:48 ` [PATCH 2/3] watchdog: rtd119x: " Tzung-Bi Shih 2026-09-13 6:48 ` [PATCH 3/3] watchdog: rzv2h: " Tzung-Bi Shih 2 siblings, 2 replies; 8+ messages in thread From: Tzung-Bi Shih @ 2026-09-13 6:48 UTC (permalink / raw) To: Wim Van Sebroeck, Guenter Roeck Cc: Baruch Siach, linux-watchdog, linux-kernel, tzungbi clk_get_rate() could return 0. Avoid a division by zero panic. Since get_timeleft() cannot propagate errors, check the clock rate early in probe() and cache the rate in the driver data as it is unlikely to change at runtime. Fixes: 336694a01dae ("watchdog: digicolor: driver for Conexant Digicolor CX92755 SoC") Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org> --- drivers/watchdog/digicolor_wdt.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/watchdog/digicolor_wdt.c b/drivers/watchdog/digicolor_wdt.c index 073d37867f47..de1a3267a972 100644 --- a/drivers/watchdog/digicolor_wdt.c +++ b/drivers/watchdog/digicolor_wdt.c @@ -25,6 +25,7 @@ struct dc_wdt { void __iomem *base; struct clk *clk; spinlock_t lock; + unsigned long rate; }; static unsigned timeout; @@ -61,7 +62,7 @@ static int dc_wdt_start(struct watchdog_device *wdog) { struct dc_wdt *wdt = watchdog_get_drvdata(wdog); - dc_wdt_set(wdt, wdog->timeout * clk_get_rate(wdt->clk)); + dc_wdt_set(wdt, wdog->timeout * wdt->rate); return 0; } @@ -79,7 +80,7 @@ static int dc_wdt_set_timeout(struct watchdog_device *wdog, unsigned int t) { struct dc_wdt *wdt = watchdog_get_drvdata(wdog); - dc_wdt_set(wdt, t * clk_get_rate(wdt->clk)); + dc_wdt_set(wdt, t * wdt->rate); wdog->timeout = t; return 0; @@ -90,7 +91,7 @@ static unsigned int dc_wdt_get_timeleft(struct watchdog_device *wdog) struct dc_wdt *wdt = watchdog_get_drvdata(wdog); uint32_t count = readl_relaxed(wdt->base + TIMER_A_COUNT); - return count / clk_get_rate(wdt->clk); + return count / wdt->rate; } static const struct watchdog_ops dc_wdt_ops = { @@ -130,7 +131,11 @@ static int dc_wdt_probe(struct platform_device *pdev) wdt->clk = devm_clk_get(dev, NULL); if (IS_ERR(wdt->clk)) return PTR_ERR(wdt->clk); - dc_wdt_wdd.max_timeout = U32_MAX / clk_get_rate(wdt->clk); + + wdt->rate = clk_get_rate(wdt->clk); + if (!wdt->rate) + return -EINVAL; + dc_wdt_wdd.max_timeout = U32_MAX / wdt->rate; dc_wdt_wdd.timeout = dc_wdt_wdd.max_timeout; dc_wdt_wdd.parent = dev; -- 2.53.0 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] watchdog: digicolor: Avoid division by zero 2026-09-13 6:48 ` [PATCH 1/3] watchdog: digicolor: Avoid division by zero Tzung-Bi Shih @ 2026-09-14 5:46 ` Baruch Siach 2026-09-17 0:27 ` Guenter Roeck 1 sibling, 0 replies; 8+ messages in thread From: Baruch Siach @ 2026-09-14 5:46 UTC (permalink / raw) To: Tzung-Bi Shih Cc: Wim Van Sebroeck, Guenter Roeck, linux-watchdog, linux-kernel Hi Tzung-Bi Shih, On Sun, Sep 13 2026, Tzung-Bi Shih wrote: > clk_get_rate() could return 0. Avoid a division by zero panic. > > Since get_timeleft() cannot propagate errors, check the clock rate early > in probe() and cache the rate in the driver data as it is unlikely to > change at runtime. > > Fixes: 336694a01dae ("watchdog: digicolor: driver for Conexant Digicolor CX92755 SoC") > Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org> Acked-by: Baruch Siach <baruch@tkos.co.il> Thanks, baruch > --- > drivers/watchdog/digicolor_wdt.c | 13 +++++++++---- > 1 file changed, 9 insertions(+), 4 deletions(-) > > diff --git a/drivers/watchdog/digicolor_wdt.c b/drivers/watchdog/digicolor_wdt.c > index 073d37867f47..de1a3267a972 100644 > --- a/drivers/watchdog/digicolor_wdt.c > +++ b/drivers/watchdog/digicolor_wdt.c > @@ -25,6 +25,7 @@ struct dc_wdt { > void __iomem *base; > struct clk *clk; > spinlock_t lock; > + unsigned long rate; > }; > > static unsigned timeout; > @@ -61,7 +62,7 @@ static int dc_wdt_start(struct watchdog_device *wdog) > { > struct dc_wdt *wdt = watchdog_get_drvdata(wdog); > > - dc_wdt_set(wdt, wdog->timeout * clk_get_rate(wdt->clk)); > + dc_wdt_set(wdt, wdog->timeout * wdt->rate); > > return 0; > } > @@ -79,7 +80,7 @@ static int dc_wdt_set_timeout(struct watchdog_device *wdog, unsigned int t) > { > struct dc_wdt *wdt = watchdog_get_drvdata(wdog); > > - dc_wdt_set(wdt, t * clk_get_rate(wdt->clk)); > + dc_wdt_set(wdt, t * wdt->rate); > wdog->timeout = t; > > return 0; > @@ -90,7 +91,7 @@ static unsigned int dc_wdt_get_timeleft(struct watchdog_device *wdog) > struct dc_wdt *wdt = watchdog_get_drvdata(wdog); > uint32_t count = readl_relaxed(wdt->base + TIMER_A_COUNT); > > - return count / clk_get_rate(wdt->clk); > + return count / wdt->rate; > } > > static const struct watchdog_ops dc_wdt_ops = { > @@ -130,7 +131,11 @@ static int dc_wdt_probe(struct platform_device *pdev) > wdt->clk = devm_clk_get(dev, NULL); > if (IS_ERR(wdt->clk)) > return PTR_ERR(wdt->clk); > - dc_wdt_wdd.max_timeout = U32_MAX / clk_get_rate(wdt->clk); > + > + wdt->rate = clk_get_rate(wdt->clk); > + if (!wdt->rate) > + return -EINVAL; > + dc_wdt_wdd.max_timeout = U32_MAX / wdt->rate; > dc_wdt_wdd.timeout = dc_wdt_wdd.max_timeout; > dc_wdt_wdd.parent = dev; -- ~. .~ Tk Open Systems =}------------------------------------------------ooO--U--Ooo------------{= - baruch@tkos.co.il - tel: +972.52.368.4656, http://www.tkos.co.il - ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] watchdog: digicolor: Avoid division by zero 2026-09-13 6:48 ` [PATCH 1/3] watchdog: digicolor: Avoid division by zero Tzung-Bi Shih 2026-09-14 5:46 ` Baruch Siach @ 2026-09-17 0:27 ` Guenter Roeck 1 sibling, 0 replies; 8+ messages in thread From: Guenter Roeck @ 2026-09-17 0:27 UTC (permalink / raw) To: Tzung-Bi Shih Cc: Wim Van Sebroeck, Baruch Siach, linux-watchdog, linux-kernel On Sun, Sep 13, 2026 at 02:48:49PM +0800, Tzung-Bi Shih wrote: > clk_get_rate() could return 0. Avoid a division by zero panic. > > Since get_timeleft() cannot propagate errors, check the clock rate early > in probe() and cache the rate in the driver data as it is unlikely to > change at runtime. > > Fixes: 336694a01dae ("watchdog: digicolor: driver for Conexant Digicolor CX92755 SoC") > Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org> > Acked-by: Baruch Siach <baruch@tkos.co.il> Applied. Thanks, Guenter ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/3] watchdog: rtd119x: Avoid division by zero 2026-09-13 6:48 [PATCH 0/3] watchdog: Avoid division by zero from clk_get_rate() Tzung-Bi Shih 2026-09-13 6:48 ` [PATCH 1/3] watchdog: digicolor: Avoid division by zero Tzung-Bi Shih @ 2026-09-13 6:48 ` Tzung-Bi Shih 2026-09-17 0:27 ` Guenter Roeck 2026-09-13 6:48 ` [PATCH 3/3] watchdog: rzv2h: " Tzung-Bi Shih 2 siblings, 1 reply; 8+ messages in thread From: Tzung-Bi Shih @ 2026-09-13 6:48 UTC (permalink / raw) To: Wim Van Sebroeck, Guenter Roeck Cc: Baruch Siach, linux-watchdog, linux-kernel, tzungbi clk_get_rate() could return 0. Avoid a division by zero panic. Fixes: 2bdf6acbfead ("watchdog: Add Realtek RTD1295") Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org> --- drivers/watchdog/rtd119x_wdt.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/watchdog/rtd119x_wdt.c b/drivers/watchdog/rtd119x_wdt.c index 984905695dde..0bfadb58917b 100644 --- a/drivers/watchdog/rtd119x_wdt.c +++ b/drivers/watchdog/rtd119x_wdt.c @@ -98,6 +98,7 @@ static int rtd119x_wdt_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; struct rtd119x_watchdog_device *data; + unsigned long rate; data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); if (!data) @@ -111,10 +112,14 @@ static int rtd119x_wdt_probe(struct platform_device *pdev) if (IS_ERR(data->clk)) return PTR_ERR(data->clk); + rate = clk_get_rate(data->clk); + if (!rate) + return -EINVAL; + data->wdt_dev.info = &rtd119x_wdt_info; data->wdt_dev.ops = &rtd119x_wdt_ops; data->wdt_dev.timeout = 120; - data->wdt_dev.max_timeout = 0xffffffff / clk_get_rate(data->clk); + data->wdt_dev.max_timeout = 0xffffffff / rate; data->wdt_dev.min_timeout = 1; data->wdt_dev.parent = dev; -- 2.53.0 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/3] watchdog: rtd119x: Avoid division by zero 2026-09-13 6:48 ` [PATCH 2/3] watchdog: rtd119x: " Tzung-Bi Shih @ 2026-09-17 0:27 ` Guenter Roeck 0 siblings, 0 replies; 8+ messages in thread From: Guenter Roeck @ 2026-09-17 0:27 UTC (permalink / raw) To: Tzung-Bi Shih Cc: Wim Van Sebroeck, Baruch Siach, linux-watchdog, linux-kernel On Sun, Sep 13, 2026 at 02:48:50PM +0800, Tzung-Bi Shih wrote: > clk_get_rate() could return 0. Avoid a division by zero panic. > > Fixes: 2bdf6acbfead ("watchdog: Add Realtek RTD1295") > Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org> Applied. Thanks, Guenter ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 3/3] watchdog: rzv2h: Avoid division by zero 2026-09-13 6:48 [PATCH 0/3] watchdog: Avoid division by zero from clk_get_rate() Tzung-Bi Shih 2026-09-13 6:48 ` [PATCH 1/3] watchdog: digicolor: Avoid division by zero Tzung-Bi Shih 2026-09-13 6:48 ` [PATCH 2/3] watchdog: rtd119x: " Tzung-Bi Shih @ 2026-09-13 6:48 ` Tzung-Bi Shih 2026-09-17 0:28 ` Guenter Roeck 2 siblings, 1 reply; 8+ messages in thread From: Tzung-Bi Shih @ 2026-09-13 6:48 UTC (permalink / raw) To: Wim Van Sebroeck, Guenter Roeck Cc: Baruch Siach, linux-watchdog, linux-kernel, tzungbi clk_get_rate() could return 0. Avoid a division by zero panic. Fixes: f6febd0a30b6 ("watchdog: Add Watchdog Timer driver for RZ/V2H(P)") Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org> --- drivers/watchdog/rzv2h_wdt.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/watchdog/rzv2h_wdt.c b/drivers/watchdog/rzv2h_wdt.c index 3b6abb66a1da..83540dd9a37b 100644 --- a/drivers/watchdog/rzv2h_wdt.c +++ b/drivers/watchdog/rzv2h_wdt.c @@ -278,6 +278,7 @@ static int rzv2h_wdt_probe(struct platform_device *pdev) struct device *dev = &pdev->dev; struct rzv2h_wdt_priv *priv; struct clk *count_clk; + unsigned long rate; int ret; priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); @@ -314,8 +315,12 @@ static int rzv2h_wdt_probe(struct platform_device *pdev) return dev_err_probe(dev, -EINVAL, "Invalid count source\n"); } + rate = clk_get_rate(count_clk); + if (!rate) + return dev_err_probe(dev, -EINVAL, "Invalid clock rate\n"); + priv->wdev.max_hw_heartbeat_ms = (MILLI * priv->of_data->timeout_cycles * - priv->of_data->cks_div) / clk_get_rate(count_clk); + priv->of_data->cks_div) / rate; dev_dbg(dev, "max hw timeout of %dms\n", priv->wdev.max_hw_heartbeat_ms); ret = devm_pm_runtime_enable(dev); -- 2.53.0 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 3/3] watchdog: rzv2h: Avoid division by zero 2026-09-13 6:48 ` [PATCH 3/3] watchdog: rzv2h: " Tzung-Bi Shih @ 2026-09-17 0:28 ` Guenter Roeck 0 siblings, 0 replies; 8+ messages in thread From: Guenter Roeck @ 2026-09-17 0:28 UTC (permalink / raw) To: Tzung-Bi Shih Cc: Wim Van Sebroeck, Baruch Siach, linux-watchdog, linux-kernel On Sun, Sep 13, 2026 at 02:48:51PM +0800, Tzung-Bi Shih wrote: > clk_get_rate() could return 0. Avoid a division by zero panic. > > Fixes: f6febd0a30b6 ("watchdog: Add Watchdog Timer driver for RZ/V2H(P)") > Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org> Applied. Thanks, Guenter ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-09-17 0:28 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-09-13 6:48 [PATCH 0/3] watchdog: Avoid division by zero from clk_get_rate() Tzung-Bi Shih 2026-09-13 6:48 ` [PATCH 1/3] watchdog: digicolor: Avoid division by zero Tzung-Bi Shih 2026-09-14 5:46 ` Baruch Siach 2026-09-17 0:27 ` Guenter Roeck 2026-09-13 6:48 ` [PATCH 2/3] watchdog: rtd119x: " Tzung-Bi Shih 2026-09-17 0:27 ` Guenter Roeck 2026-09-13 6:48 ` [PATCH 3/3] watchdog: rzv2h: " Tzung-Bi Shih 2026-09-17 0:28 ` Guenter Roeck
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.