diff --git a/src/new/linux_uapi/linux/mod.rs b/src/new/linux_uapi/linux/mod.rs index 994a59c0c3864..09e2c3ece7417 100644 --- a/src/new/linux_uapi/linux/mod.rs +++ b/src/new/linux_uapi/linux/mod.rs @@ -6,3 +6,4 @@ pub(crate) mod can; pub(crate) mod keyctl; pub(crate) mod membarrier; pub(crate) mod netlink; +pub(crate) mod pidfd; diff --git a/src/new/linux_uapi/linux/pidfd.rs b/src/new/linux_uapi/linux/pidfd.rs new file mode 100644 index 0000000000000..1835184a18601 --- /dev/null +++ b/src/new/linux_uapi/linux/pidfd.rs @@ -0,0 +1,59 @@ +//! Header: `uapi/linux/pidfd.h` + +use crate::prelude::*; +use crate::{ + Ioctl, + _IO, + _IOWR, +}; + +/* Flags for pidfd_open(). */ +pub const PIDFD_NONBLOCK: c_uint = crate::O_NONBLOCK as c_uint; +pub const PIDFD_THREAD: c_uint = crate::O_EXCL as c_uint; + +/* Flags for pidfd_send_signal(). */ +pub const PIDFD_SIGNAL_THREAD: c_uint = 1 << 0; +pub const PIDFD_SIGNAL_THREAD_GROUP: c_uint = 1 << 1; +pub const PIDFD_SIGNAL_PROCESS_GROUP: c_uint = 1 << 2; + +/* Flags for pidfd_info. */ +pub const PIDFD_INFO_PID: c_uint = 1 << 0; +pub const PIDFD_INFO_CREDS: c_uint = 1 << 1; +pub const PIDFD_INFO_CGROUPID: c_uint = 1 << 2; +pub const PIDFD_INFO_EXIT: c_uint = 1 << 3; + +pub const PIDFD_INFO_SIZE_VER0: c_uint = 64; + +s! { + #[non_exhaustive] + pub struct pidfd_info { + pub mask: crate::__u64, + pub cgroupid: crate::__u64, + pub pid: crate::__u32, + pub tgid: crate::__u32, + pub ppid: crate::__u32, + pub ruid: crate::__u32, + pub rgid: crate::__u32, + pub euid: crate::__u32, + pub egid: crate::__u32, + pub suid: crate::__u32, + pub sgid: crate::__u32, + pub fsuid: crate::__u32, + pub fsgid: crate::__u32, + pub exit_code: crate::__s32, + } +} + +const PIDFS_IOCTL_MAGIC: c_uint = 0xFF; + +pub const PIDFD_GET_CGROUP_NAMESPACE: Ioctl = _IO(PIDFS_IOCTL_MAGIC, 1); +pub const PIDFD_GET_IPC_NAMESPACE: Ioctl = _IO(PIDFS_IOCTL_MAGIC, 2); +pub const PIDFD_GET_MNT_NAMESPACE: Ioctl = _IO(PIDFS_IOCTL_MAGIC, 3); +pub const PIDFD_GET_NET_NAMESPACE: Ioctl = _IO(PIDFS_IOCTL_MAGIC, 4); +pub const PIDFD_GET_PID_NAMESPACE: Ioctl = _IO(PIDFS_IOCTL_MAGIC, 5); +pub const PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE: Ioctl = _IO(PIDFS_IOCTL_MAGIC, 6); +pub const PIDFD_GET_TIME_NAMESPACE: Ioctl = _IO(PIDFS_IOCTL_MAGIC, 7); +pub const PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE: Ioctl = _IO(PIDFS_IOCTL_MAGIC, 8); +pub const PIDFD_GET_USER_NAMESPACE: Ioctl = _IO(PIDFS_IOCTL_MAGIC, 9); +pub const PIDFD_GET_UTS_NAMESPACE: Ioctl = _IO(PIDFS_IOCTL_MAGIC, 10); +pub const PIDFD_GET_INFO: Ioctl = _IOWR::(PIDFS_IOCTL_MAGIC, 11); diff --git a/src/new/mod.rs b/src/new/mod.rs index fa6c3bf3bd774..c0c6891242ad4 100644 --- a/src/new/mod.rs +++ b/src/new/mod.rs @@ -184,6 +184,7 @@ cfg_if! { pub use linux::keyctl::*; pub use linux::membarrier::*; pub use linux::netlink::*; + pub use linux::pidfd::*; #[cfg(target_env = "gnu")] pub use net::route::*; } else if #[cfg(target_vendor = "apple")] { diff --git a/src/unix/linux_like/linux/mod.rs b/src/unix/linux_like/linux/mod.rs index 2a8dcd1339da9..5da445210526e 100644 --- a/src/unix/linux_like/linux/mod.rs +++ b/src/unix/linux_like/linux/mod.rs @@ -1011,24 +1011,6 @@ s! { // linux/pidfd.h - #[non_exhaustive] - pub struct pidfd_info { - pub mask: crate::__u64, - pub cgroupid: crate::__u64, - pub pid: crate::__u32, - pub tgid: crate::__u32, - pub ppid: crate::__u32, - pub ruid: crate::__u32, - pub rgid: crate::__u32, - pub euid: crate::__u32, - pub egid: crate::__u32, - pub suid: crate::__u32, - pub sgid: crate::__u32, - pub fsuid: crate::__u32, - pub fsgid: crate::__u32, - pub exit_code: crate::__s32, - } - // linux/uio.h pub struct dmabuf_cmsg { @@ -1599,34 +1581,6 @@ pub const NS_MNT_GET_INFO: Ioctl = _IOR::(NSIO, 10); pub const NS_MNT_GET_NEXT: Ioctl = _IOR::(NSIO, 11); pub const NS_MNT_GET_PREV: Ioctl = _IOR::(NSIO, 12); -// linux/pidfd.h -pub const PIDFD_NONBLOCK: c_uint = O_NONBLOCK as c_uint; -pub const PIDFD_THREAD: c_uint = O_EXCL as c_uint; - -pub const PIDFD_SIGNAL_THREAD: c_uint = 1 << 0; -pub const PIDFD_SIGNAL_THREAD_GROUP: c_uint = 1 << 1; -pub const PIDFD_SIGNAL_PROCESS_GROUP: c_uint = 1 << 2; - -pub const PIDFD_INFO_PID: c_uint = 1 << 0; -pub const PIDFD_INFO_CREDS: c_uint = 1 << 1; -pub const PIDFD_INFO_CGROUPID: c_uint = 1 << 2; -pub const PIDFD_INFO_EXIT: c_uint = 1 << 3; - -pub const PIDFD_INFO_SIZE_VER0: c_uint = 64; - -const PIDFS_IOCTL_MAGIC: c_uint = 0xFF; -pub const PIDFD_GET_CGROUP_NAMESPACE: Ioctl = _IO(PIDFS_IOCTL_MAGIC, 1); -pub const PIDFD_GET_IPC_NAMESPACE: Ioctl = _IO(PIDFS_IOCTL_MAGIC, 2); -pub const PIDFD_GET_MNT_NAMESPACE: Ioctl = _IO(PIDFS_IOCTL_MAGIC, 3); -pub const PIDFD_GET_NET_NAMESPACE: Ioctl = _IO(PIDFS_IOCTL_MAGIC, 4); -pub const PIDFD_GET_PID_NAMESPACE: Ioctl = _IO(PIDFS_IOCTL_MAGIC, 5); -pub const PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE: Ioctl = _IO(PIDFS_IOCTL_MAGIC, 6); -pub const PIDFD_GET_TIME_NAMESPACE: Ioctl = _IO(PIDFS_IOCTL_MAGIC, 7); -pub const PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE: Ioctl = _IO(PIDFS_IOCTL_MAGIC, 8); -pub const PIDFD_GET_USER_NAMESPACE: Ioctl = _IO(PIDFS_IOCTL_MAGIC, 9); -pub const PIDFD_GET_UTS_NAMESPACE: Ioctl = _IO(PIDFS_IOCTL_MAGIC, 10); -pub const PIDFD_GET_INFO: Ioctl = _IOWR::(PIDFS_IOCTL_MAGIC, 11); - pub const PR_SET_MDWE: c_int = 65; pub const PR_GET_MDWE: c_int = 66; pub const PR_MDWE_REFUSE_EXEC_GAIN: c_uint = 1 << 0;