From 8cfae74dcd13457fdb2f6bd563313c3abf47d68e Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 26 Mar 2026 08:50:08 +0100 Subject: [PATCH] shutdown: check WATCHDOG_PID= if it is set Alternative to: #35167 --- src/shutdown/shutdown.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/shutdown/shutdown.c b/src/shutdown/shutdown.c index 83fa8c0b66..9b0328bfca 100644 --- a/src/shutdown/shutdown.c +++ b/src/shutdown/shutdown.c @@ -286,6 +286,22 @@ static void init_watchdog(void) { const char *s; int r; + /* NB: we do not insist on $WATCHDOG_PID being set because old systemd versions didn't set it at all, + * and we want to retain some basic compatibility between an old service manager and a new shutdown + * binary. If it *is* set we'll insist on it being set to 1 however. */ + s = secure_getenv("WATCHDOG_PID"); + if (s) { + pid_t pid; + + r = parse_pid(s, &pid); + if (r < 0) + log_warning_errno(r, "Failed to parse $WATCHDOG_PID, ignoring: %s", s); + else if (pid != getpid_cached()) { + log_warning("$WATCHDOG_PID set, but not to " PID_FMT ", skipping watchdog logic.", getpid_cached()); + return; + } + } + s = secure_getenv("WATCHDOG_DEVICE"); if (s) { r = watchdog_set_device(s);