summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Arcari <darcari@redhat.com>2026-09-03 14:20:29 -0400
committerGuenter Roeck <linux@roeck-us.net>2026-09-09 13:40:59 -0700
commit0fa37512eb747e4ffdcf367274f9e72845f1bca4 (patch)
tree57fe396eaf31f15f8d7e78befe25d39f0b830ddb
parentd83b7502bb087fa54daf0fdd419d2910c34bc97d (diff)
downloadlinux-0fa37512eb747e4ffdcf367274f9e72845f1bca4.tar.gz
linux-0fa37512eb747e4ffdcf367274f9e72845f1bca4.zip
watchdog: fix hrtimer start when pretimeout is zero
Per the watchdog API, a pretimeout value of 0 disables the feature. However, watchdog_hrtimer_pretimeout_start() fails to verify if the pretimeout is non-zero before arming the timer. This omission inadvertently starts the software pretimeout timer, which could result in the pretimeout handler executing incorrectly when the watchdog timeout is reached. Fix this by adding a check for wdd->pretimeout before calling hrtimer_start(), ensuring the disabled state is respected. Fixes: 7b7d2fdc8c3e ("watchdog: Add hrtimer-based pretimeout feature") Signed-off-by: David Arcari <darcari@redhat.com> Link: https://patch.msgid.link/20260903182029.936030-1-darcari@redhat.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
-rw-r--r--drivers/watchdog/watchdog_hrtimer_pretimeout.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/watchdog/watchdog_hrtimer_pretimeout.c b/drivers/watchdog/watchdog_hrtimer_pretimeout.c
index fbc7eecd8b20..49a05ea60c97 100644
--- a/drivers/watchdog/watchdog_hrtimer_pretimeout.c
+++ b/drivers/watchdog/watchdog_hrtimer_pretimeout.c
@@ -30,6 +30,7 @@ void watchdog_hrtimer_pretimeout_init(struct watchdog_device *wdd)
void watchdog_hrtimer_pretimeout_start(struct watchdog_device *wdd)
{
if (!(wdd->info->options & WDIOF_PRETIMEOUT) &&
+ wdd->pretimeout &&
!watchdog_pretimeout_invalid(wdd, wdd->pretimeout))
hrtimer_start(&wdd->wd_data->pretimeout_timer,
ktime_set(wdd->timeout - wdd->pretimeout, 0),