diff --git a/src/basic/process-util.c b/src/basic/process-util.c index 59dfaa07f3..c74a7e7ea4 100644 --- a/src/basic/process-util.c +++ b/src/basic/process-util.c @@ -702,15 +702,17 @@ int get_process_ppid(pid_t pid, pid_t *ret) { assert(pid >= 0); - if (pid == 0 || pid == getpid_cached()) { + if (pid == 0) + pid = getpid_cached(); + if (pid == 1) /* PID 1 has no parent, shortcut this case */ + return -EADDRNOTAVAIL; + + if (pid == getpid_cached()) { if (ret) *ret = getppid(); return 0; } - if (pid == 1) /* PID 1 has no parent, shortcut this case */ - return -EADDRNOTAVAIL; - p = procfs_file_alloca(pid, "stat"); r = read_one_line_file(p, &line); if (r == -ENOENT) @@ -724,7 +726,6 @@ int get_process_ppid(pid_t pid, pid_t *ret) { p = strrchr(line, ')'); if (!p) return -EIO; - p++; if (sscanf(p, " " @@ -733,9 +734,9 @@ int get_process_ppid(pid_t pid, pid_t *ret) { &ppid) != 1) return -EIO; - /* If ppid is zero the process has no parent. Which might be the case for PID 1 but also for - * processes originating in other namespaces that are inserted into a pidns. Return a recognizable - * error in this case. */ + /* If ppid is zero the process has no parent. Which might be the case for PID 1 (caught above) + * but also for processes originating in other namespaces that are inserted into a pidns. + * Return a recognizable error in this case. */ if (ppid == 0) return -EADDRNOTAVAIL;