]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
pidfd-util: open an internal pidfd if none is passed in pidfd_check_pidfs()
authorMike Yuan <me@yhndnzj.com>
Sun, 1 Jun 2025 06:55:50 +0000 (08:55 +0200)
committerMike Yuan <me@yhndnzj.com>
Wed, 4 Jun 2025 22:28:01 +0000 (00:28 +0200)
I'd like to introduce a libsystemd helper for acquiring pidfd
inode id, which however means the fd passed to pidfd_check_pidfs()
can no longer be trusted. Let's add back the logic of allocating
a genuine pidfd allocated internally, which was remove in
5dc9d5b4eacbe32f58ad6ca18d70931ab89ea409.

src/basic/pidfd-util.c

index f53a94f2d3e3484e775c5c43f312234aa97ce466..629ffe95961fca7e3443e5a21a29d8693b79362a 100644 (file)
@@ -26,6 +26,15 @@ static int pidfd_check_pidfs(int pid_fd) {
         if (have_pidfs >= 0)
                 return have_pidfs;
 
+        _cleanup_close_ int our_fd = -EBADF;
+        if (pid_fd < 0) {
+                our_fd = pidfd_open(getpid_cached(), /* flags = */ 0);
+                if (our_fd < 0)
+                        return -errno;
+
+                pid_fd = our_fd;
+        }
+
         return (have_pidfs = fd_is_fs_type(pid_fd, PID_FS_MAGIC));
 }