From b8c597d5d21e83966bdee8a701e6d994aaf650ee Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 8 Apr 2010 03:48:52 +0200 Subject: [PATCH] service: verify PID is valid when reading it from PID file --- service.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/service.c b/service.c index 3d840cb..832c7b3 100644 --- a/service.c +++ b/service.c @@ -839,7 +839,13 @@ static int service_load_pid_file(Service *s) { if ((unsigned long) (pid_t) p != p) return -ERANGE; - s->main_pid = p; + if (kill((pid_t) p, 0) < 0 && errno != EPERM) { + log_warning("PID %llu read from file %s does not exist. Your service or init script might be broken.", + (unsigned long long) p, s->pid_file); + return -ESRCH; + } + + s->main_pid = (pid_t) p; s->main_pid_known = true; return 0; -- 2.7.4