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.
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));
}