diff options
| author | David CARLIER <devnexen@gmail.com> | 2023-04-08 11:49:51 +0100 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2023-04-08 18:31:01 +0300 |
| commit | 2e2d37917d4227d6ab9c8e43b3619bc47ce56417 (patch) | |
| tree | 883cecdeda04f0cdf300f6d12b9e997842aeab5b /lib | |
| parent | 58bab660b5080f36c29ce1e870cc8aacec64eb70 (diff) | |
| download | zig-2e2d37917d4227d6ab9c8e43b3619bc47ce56417.tar.gz zig-2e2d37917d4227d6ab9c8e43b3619bc47ce56417.zip | |
std: add FreeBSD's procctl api.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/std/c/freebsd.zig | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/lib/std/c/freebsd.zig b/lib/std/c/freebsd.zig index 9a13e3658b..c877a11ea0 100644 --- a/lib/std/c/freebsd.zig +++ b/lib/std/c/freebsd.zig @@ -202,6 +202,8 @@ pub const clock_t = isize; pub const socklen_t = u32; pub const suseconds_t = c_long; +pub const id_t = i64; + /// Renamed from `kevent` to `Kevent` to avoid conflict with function name. pub const Kevent = extern struct { /// Identifier for this event. @@ -1947,3 +1949,128 @@ pub const MFD = struct { pub extern "c" fn memfd_create(name: [*:0]const u8, flags: c_uint) c_int; pub extern "c" fn copy_file_range(fd_in: fd_t, off_in: ?*off_t, fd_out: fd_t, off_out: ?*off_t, len: usize, flags: u32) usize; + +pub const idtype_t = enum(c_int) { + P_PID = 0, + P_PPID = 1, + P_PGID = 2, + P_SID = 3, + P_CID = 4, + P_UID = 5, + P_GID = 6, + P_ALL = 7, + P_LWPID = 8, + P_TASKID = 9, + P_PROJID = 10, + P_POOLID = 11, + P_JAILID = 12, + P_CTID = 13, + P_CPUID = 14, + P_PSETID = 15, +}; + +pub const PROC = struct { + // constants for the id_t argument + pub const SPROTECT: id_t = 1; + pub const REAP_ACQUIRE: id_t = 2; + pub const REAP_RELEASE: id_t = 3; + pub const REAP_STATUS: id_t = 4; + pub const REAP_GETPIDS: id_t = 5; + pub const REAP_KILL: id_t = 6; + pub const TRACE_CTL: id_t = 7; + pub const TRACE_STATUS: id_t = 8; + pub const TRACECAP_CTL = 9; + pub const TRACECAP_STATUS: id_t = 10; + pub const PDEATHSIG_CTL: id_t = 11; + pub const PDEATHSIG_STATUS: id_t = 12; + pub const ASLR_CTL: id_t = 13; + pub const ASLR_STATUS: id_t = 14; + pub const PROTMAX_CTL: id_t = 15; + pub const PROTMAX_STATUS: id_t = 16; + pub const STACKGAP_CTL: id_t = 17; + pub const STACKGAP_STATUS: id_t = 18; + pub const NO_NEW_PRIVS_CTL: id_t = 19; + pub const NO_NEW_PRIVS_STATUS: id_t = 20; + pub const WXMAP_CTL: id_t = 21; + pub const WXMAP_STATUS: id_t = 22; + + // constants for the operations + pub const TRACE_CTL_ENABLE = 1; + pub const TRACE_CTL_DISABLE = 2; + pub const TRACE_CTL_DISABLE_EXEC = 3; + pub const TRAPCAP_CTL_ENABLE = 1; + pub const TRAPCAP_CTL_DISABLE = 2; + pub const ASLR_FORCE_ENABLE = 1; + pub const ASLR_FORCE_DISABLE = 2; + pub const ASLR_FORCE_NOFORCE = 3; + pub const ASLR_FORCE_ACTIVE = 0x80000000; + pub const PROTMAX_FORCE_ENABLE = 1; + pub const PROTMAX_FORCE_DISABLE = 2; + pub const PROTMAX_FORCE_NOFORCE = 3; + pub const PROTMAX_FORCE_ACTIVE = 0x80000000; + pub const STACKGAP_ENABLE = 0x0001; + pub const STACKGAP_DISABLE = 0x0002; + pub const STACKGAP_ENABLE_EXEC = 0x0004; + pub const STACKGAP_DISABLE_EXEC = 0x0008; + pub const NO_NEW_PRIVS_ENABLE = 1; + pub const NO_NEW_PRIVS_DISABLE = 2; + pub const WX_MAPPINGS_PERMIT = 0x0001; + pub const WX_MAPPINGS_DISALLOW_EXEC = 0x0002; + pub const WX_MAPPINGS_ENFORCE = 0x80000000; +}; + +pub const PPROT = struct { + pub fn OP(x: i32) i32 { + return x & 0xf; + } + pub const SET = 1; + pub const CLEAR = 2; + pub fn FLAGS(x: i32) i32 { + return x & !0xf; + } + pub const DESCEND = 0x10; + pub const INHERIT = 0x20; +}; + +pub const REAPER = struct { + pub const STATUS_OWNED = 0x00000001; + pub const STATUS_REALINIT = 0x00000002; + pub const PIDINFO_VALID = 0x00000001; + pub const PIDINFO_CHILD = 0x00000002; + pub const PIDINFO_REAPER = 0x00000004; + pub const KILL_CHILDREN = 0x00000001; + pub const KILL_SUBTREE = 0x00000002; +}; + +pub const procctl_reaper_status = extern struct { + rs_flags: u32, + rs_children: u32, + rs_descendants: u32, + rs_reaper: pid_t, + rs_pid: pid_t, + rs_pad0: [15]u32, +}; + +pub const procctl_reaper_pidinfo = extern struct { + pi_pid: pid_t, + pi_subtree: pid_t, + pi_flags: u32, + pi_pad0: [15]u32, +}; + +pub const procctl_reaper_pids = extern struct { + rp_count: u32, + rp_pad0: [15]u32, + rp_pids: [*]procctl_reaper_pidinfo, +}; + +pub const procctl_reaper_kill = extern struct { + rk_sig: c_int, + rk_flags: u32, + rk_subtree: pid_t, + rk_killed: u32, + rk_fpid: pid_t, + rk_pad0: [15]u32, +}; + +pub extern "c" fn procctl(idtype: idtype_t, id: id_t, cmd: c_int, data: ?*anyopaque) c_int; |
