#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
use std::os::raw::*;
pub const SECCOMP_MODE_DISABLED: u64 = 0;
pub const SECCOMP_MODE_STRICT: u64 = 1;
pub const SECCOMP_MODE_FILTER: u64 = 2;
pub const SECCOMP_SET_MODE_STRICT: u32 = 0;
pub const SECCOMP_SET_MODE_FILTER: u32 = 1;
pub const SECCOMP_GET_ACTION_AVAIL: u32 = 2;
pub const SECCOMP_GET_NOTIF_SIZES: u32 = 3;
pub const SECCOMP_FILTER_FLAG_TSYNC: u32 = 1;
pub const SECCOMP_FILTER_FLAG_LOG: u32 = 2;
pub const SECCOMP_FILTER_FLAG_SPEC_ALLOW: u32 = 4;
pub const SECCOMP_FILTER_FLAG_NEW_LISTENER: u32 = 8;
pub const SECCOMP_FILTER_FLAG_TSYNC_ESRCH: u32 = 16;
pub const SECCOMP_RET_KILL_PROCESS: u32 = 0x80000000;
pub const SECCOMP_RET_KILL_THREAD: u32 = 0x00000000;
pub const SECCOMP_RET_KILL: u32 = SECCOMP_RET_KILL_THREAD;
pub const SECCOMP_RET_TRAP: u32 = 0x00030000;
pub const SECCOMP_RET_ERRNO: u32 = 0x00050000;
pub const SECCOMP_RET_USER_NOTIF: u32 = 0x7fc00000;
pub const SECCOMP_RET_TRACE: u32 = 0x7ff00000;
pub const SECCOMP_RET_LOG: u32 = 0x7ffc0000;
pub const SECCOMP_RET_ALLOW: u32 = 0x7fff0000;
pub const SECCOMP_RET_ACTION_FULL: u32 = 0xffff0000;
pub const SECCOMP_RET_ACTION: u32 = 0x7fff0000;
pub const SECCOMP_RET_DATA: u32 = 0x0000ffff;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[repr(C)]
pub struct seccomp_data {
pub nr: c_int,
pub arch: u32,
pub instruction_pointer: u64,
pub args: [u64; 6],
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[repr(C)]
pub struct seccomp_notif_sizes {
pub seccomp_notif: u16,
pub seccomp_notif_resp: u16,
pub seccomp_data: u16,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[repr(C)]
pub struct seccomp_notif {
pub id: u64,
pub pid: u32,
pub flags: u32,
pub data: seccomp_data,
}
pub const SECCOMP_USER_NOTIF_FLAG_CONTINUE: u32 = 1;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[repr(C)]
pub struct seccomp_notif_resp {
pub id: u64,
pub val: i64,
pub error: i32,
pub flags: u32,
}
pub const SECCOMP_ADDFD_FLAG_SETFD: u32 = 1;
pub const SECCOMP_ADDFD_FLAG_SEND: u32 = 2;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[repr(C)]
pub struct seccomp_notif_addfd {
pub id: u64,
pub flags: u32,
pub srcfd: u32,
pub newfd: u32,
pub newfd_flags: u32,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[repr(C)]
pub struct scmp_version {
pub major: c_uint,
pub minor: c_uint,
pub micro: c_uint,
}
pub type scmp_filter_ctx = *mut c_void;
pub type const_scmp_filter_ctx = *const c_void;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[repr(C)]
pub enum scmp_filter_attr {
_SCMP_FLTATR_MIN = 0,
SCMP_FLTATR_ACT_DEFAULT = 1,
SCMP_FLTATR_ACT_BADARCH = 2,
SCMP_FLTATR_CTL_NNP = 3,
SCMP_FLTATR_CTL_TSYNC = 4,
SCMP_FLTATR_API_TSKIP = 5,
SCMP_FLTATR_CTL_LOG = 6,
SCMP_FLTATR_CTL_SSB = 7,
SCMP_FLTATR_CTL_OPTIMIZE = 8,
SCMP_FLTATR_API_SYSRAWRC = 9,
SCMP_FLTATR_CTL_WAITKILL = 10,
_SCMP_FLTATR_MAX,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[repr(C)]
pub enum scmp_compare {
_SCMP_CMP_MIN = 0,
SCMP_CMP_NE = 1,
SCMP_CMP_LT = 2,
SCMP_CMP_LE = 3,
SCMP_CMP_EQ = 4,
SCMP_CMP_GE = 5,
SCMP_CMP_GT = 6,
SCMP_CMP_MASKED_EQ = 7,
_SCMP_CMP_MAX,
}
pub type scmp_datum_t = u64;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[repr(C)]
pub struct scmp_arg_cmp {
pub arg: c_uint,
pub op: scmp_compare,
pub datum_a: scmp_datum_t,
pub datum_b: scmp_datum_t,
}
pub const SCMP_ARCH_NATIVE: u32 = 0x0;
pub const SCMP_ARCH_X86: u32 = 0x40000003;
pub const SCMP_ARCH_X86_64: u32 = 0xc000003e;
pub const SCMP_ARCH_X32: u32 = 0x4000003e;
pub const SCMP_ARCH_ARM: u32 = 0x40000028;
pub const SCMP_ARCH_AARCH64: u32 = 0xc00000b7;
pub const SCMP_ARCH_LOONGARCH64: u32 = 0xc0000102;
pub const SCMP_ARCH_M68K: u32 = 0x4;
pub const SCMP_ARCH_MIPS: u32 = 0x8;
pub const SCMP_ARCH_MIPS64: u32 = 0x80000008;
pub const SCMP_ARCH_MIPS64N32: u32 = 0xa0000008;
pub const SCMP_ARCH_MIPSEL: u32 = 0x40000008;
pub const SCMP_ARCH_MIPSEL64: u32 = 0xc0000008;
pub const SCMP_ARCH_MIPSEL64N32: u32 = 0xe0000008;
pub const SCMP_ARCH_PPC: u32 = 0x14;
pub const SCMP_ARCH_PPC64: u32 = 0x80000015;
pub const SCMP_ARCH_PPC64LE: u32 = 0xc0000015;
pub const SCMP_ARCH_S390: u32 = 0x16;
pub const SCMP_ARCH_S390X: u32 = 0x80000016;
pub const SCMP_ARCH_PARISC: u32 = 0xf;
pub const SCMP_ARCH_PARISC64: u32 = 0x8000000f;
pub const SCMP_ARCH_RISCV64: u32 = 0xc00000f3;
pub const SCMP_ARCH_SHEB: u32 = 0x2a;
pub const SCMP_ARCH_SH: u32 = 0x4000002a;
pub const SCMP_ACT_MASK: u32 = SECCOMP_RET_ACTION_FULL;
pub const SCMP_ACT_KILL_PROCESS: u32 = 0x80000000;
pub const SCMP_ACT_KILL_THREAD: u32 = 0x00000000;
pub const SCMP_ACT_KILL: u32 = SCMP_ACT_KILL_THREAD;
pub const SCMP_ACT_TRAP: u32 = 0x00030000;
pub const SCMP_ACT_NOTIFY: u32 = 0x7fc00000;
pub const SCMP_ACT_ERRNO_MASK: u32 = 0x00050000;
#[must_use]
pub const fn SCMP_ACT_ERRNO(x: u16) -> u32 {
SCMP_ACT_ERRNO_MASK | x as u32
}
pub const SCMP_ACT_TRACE_MASK: u32 = 0x7ff00000;
#[must_use]
pub const fn SCMP_ACT_TRACE(x: u16) -> u32 {
SCMP_ACT_TRACE_MASK | x as u32
}
pub const SCMP_ACT_LOG: u32 = 0x7ffc0000;
pub const SCMP_ACT_ALLOW: u32 = 0x7fff0000;
#[link(name = "seccomp")]
extern "C" {
pub fn seccomp_version() -> *const scmp_version;
pub fn seccomp_api_get() -> c_uint;
pub fn seccomp_api_set(level: c_uint) -> c_int;
pub fn seccomp_init(def_action: u32) -> scmp_filter_ctx;
pub fn seccomp_reset(ctx: scmp_filter_ctx, def_action: u32) -> c_int;
pub fn seccomp_release(ctx: scmp_filter_ctx);
pub fn seccomp_merge(ctx_dst: scmp_filter_ctx, ctx_src: scmp_filter_ctx) -> c_int;
pub fn seccomp_arch_resolve_name(arch_name: *const c_char) -> u32;
pub fn seccomp_arch_native() -> u32;
pub fn seccomp_arch_exist(ctx: const_scmp_filter_ctx, arch_token: u32) -> c_int;
pub fn seccomp_arch_add(ctx: scmp_filter_ctx, arch_token: u32) -> c_int;
pub fn seccomp_arch_remove(ctx: scmp_filter_ctx, arch_token: u32) -> c_int;
pub fn seccomp_load(ctx: const_scmp_filter_ctx) -> c_int;
pub fn seccomp_attr_get(
ctx: const_scmp_filter_ctx,
attr: scmp_filter_attr,
value: *mut u32,
) -> c_int;
pub fn seccomp_attr_set(ctx: scmp_filter_ctx, attr: scmp_filter_attr, value: u32) -> c_int;
pub fn seccomp_syscall_resolve_num_arch(arch_token: u32, num: c_int) -> *const c_char;
pub fn seccomp_syscall_resolve_name_arch(arch_token: u32, name: *const c_char) -> c_int;
pub fn seccomp_syscall_resolve_name_rewrite(arch_token: u32, name: *const c_char) -> c_int;
pub fn seccomp_syscall_resolve_name(name: *const c_char) -> c_int;
pub fn seccomp_syscall_priority(ctx: scmp_filter_ctx, syscall: c_int, priority: u8) -> c_int;
pub fn seccomp_rule_add(
ctx: scmp_filter_ctx,
action: u32,
syscall: c_int,
arg_cnt: c_uint,
...
) -> c_int;
pub fn seccomp_rule_add_array(
ctx: scmp_filter_ctx,
action: u32,
syscall: c_int,
arg_cnt: c_uint,
arg_array: *const scmp_arg_cmp,
) -> c_int;
pub fn seccomp_rule_add_exact(
ctx: scmp_filter_ctx,
action: u32,
syscall: c_int,
arg_cnt: c_uint,
...
) -> c_int;
pub fn seccomp_rule_add_exact_array(
ctx: scmp_filter_ctx,
action: u32,
syscall: c_int,
arg_cnt: c_uint,
arg_array: *const scmp_arg_cmp,
) -> c_int;
pub fn seccomp_notify_alloc(
req: *mut *mut seccomp_notif,
resp: *mut *mut seccomp_notif_resp,
) -> c_int;
pub fn seccomp_notify_free(req: *mut seccomp_notif, resp: *mut seccomp_notif_resp) -> c_int;
pub fn seccomp_notify_receive(fd: c_int, req: *mut seccomp_notif) -> c_int;
pub fn seccomp_notify_respond(fd: c_int, resp: *mut seccomp_notif_resp) -> c_int;
pub fn seccomp_notify_id_valid(fd: c_int, id: u64) -> c_int;
pub fn seccomp_notify_fd(ctx: const_scmp_filter_ctx) -> c_int;
pub fn seccomp_export_pfc(ctx: const_scmp_filter_ctx, fd: c_int) -> c_int;
pub fn seccomp_export_bpf(ctx: const_scmp_filter_ctx, fd: c_int) -> c_int;
pub fn seccomp_export_bpf_mem(
ctx: const_scmp_filter_ctx,
buf: *mut c_void,
len: *mut usize,
) -> c_int;
pub fn seccomp_transaction_start(ctx: const_scmp_filter_ctx) -> c_int;
pub fn seccomp_transaction_reject(ctx: scmp_filter_ctx);
pub fn seccomp_transaction_commit(ctx: scmp_filter_ctx) -> c_int;
pub fn seccomp_precompute(ctx: const_scmp_filter_ctx) -> c_int;
}
pub const __NR_SCMP_ERROR: c_int = -1;
pub const __NR_SCMP_UNDEF: c_int = -2;