diff options
| author | David Arcari <darcari@redhat.com> | 2026-09-03 14:20:29 -0400 |
|---|---|---|
| committer | Guenter Roeck <linux@roeck-us.net> | 2026-09-09 13:40:59 -0700 |
| commit | 0fa37512eb747e4ffdcf367274f9e72845f1bca4 (patch) | |
| tree | 57fe396eaf31f15f8d7e78befe25d39f0b830ddb | |
| parent | d83b7502bb087fa54daf0fdd419d2910c34bc97d (diff) | |
| download | linux-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.c | 1 |
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), |
