mirror of
https://github.com/morgan9e/systemd
synced 2026-04-14 08:25:20 +09:00
pidfd-util: introduce pidfd_get_{ppid,uid,cgroupid} which goes via PIDFD_GET_INFO too
This commit is contained in:
@@ -176,6 +176,60 @@ int pidfd_verify_pid(int pidfd, pid_t pid) {
|
||||
return current_pid != pid ? -ESRCH : 0;
|
||||
}
|
||||
|
||||
int pidfd_get_ppid(int fd, pid_t *ret) {
|
||||
struct pidfd_info info = { .mask = PIDFD_INFO_PID };
|
||||
int r;
|
||||
|
||||
assert(fd >= 0);
|
||||
|
||||
r = pidfd_get_info(fd, &info);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
assert(FLAGS_SET(info.mask, PIDFD_INFO_PID));
|
||||
|
||||
if (info.ppid == 0)
|
||||
return -EADDRNOTAVAIL;
|
||||
|
||||
if (ret)
|
||||
*ret = info.ppid;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int pidfd_get_uid(int fd, uid_t *ret) {
|
||||
struct pidfd_info info = { .mask = PIDFD_INFO_CREDS };
|
||||
int r;
|
||||
|
||||
assert(fd >= 0);
|
||||
|
||||
r = pidfd_get_info(fd, &info);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
assert(FLAGS_SET(info.mask, PIDFD_INFO_CREDS));
|
||||
|
||||
if (ret)
|
||||
*ret = info.ruid;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int pidfd_get_cgroupid(int fd, uint64_t *ret) {
|
||||
struct pidfd_info info = { .mask = PIDFD_INFO_CGROUPID };
|
||||
int r;
|
||||
|
||||
assert(fd >= 0);
|
||||
|
||||
r = pidfd_get_info(fd, &info);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
assert(FLAGS_SET(info.mask, PIDFD_INFO_CGROUPID));
|
||||
|
||||
if (ret)
|
||||
*ret = info.cgroupid;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int pidfd_get_inode_id(int fd, uint64_t *ret) {
|
||||
int r;
|
||||
|
||||
|
||||
@@ -12,4 +12,8 @@ int pidfd_get_namespace(int fd, unsigned long ns_type_cmd);
|
||||
int pidfd_get_pid(int fd, pid_t *ret);
|
||||
int pidfd_verify_pid(int pidfd, pid_t pid);
|
||||
|
||||
int pidfd_get_ppid(int fd, pid_t *ret);
|
||||
int pidfd_get_uid(int fd, uid_t *ret);
|
||||
int pidfd_get_cgroupid(int fd, uint64_t *ret);
|
||||
|
||||
int pidfd_get_inode_id(int fd, uint64_t *ret);
|
||||
|
||||
Reference in New Issue
Block a user