instance: avoid dumping invalid service instances - prevents a potential crash
[project/procd.git] / jail / seccomp-bpf.h
1 /*
2  * seccomp example for x86 (32-bit and 64-bit) with BPF macros
3  *
4  * Copyright (c) 2012 The Chromium OS Authors <chromium-os-dev@chromium.org>
5  * Authors:
6  *  Will Drewry <wad@chromium.org>
7  *  Kees Cook <keescook@chromium.org>
8  *
9  * Use of this source code is governed by a BSD-style license that can be
10  * found in the LICENSE file.
11  */
12 #ifndef _SECCOMP_BPF_H_
13 #define _SECCOMP_BPF_H_
14
15 #define _GNU_SOURCE 1
16 #include <stdio.h>
17 #include <stddef.h>
18 #include <stdlib.h>
19 #include <errno.h>
20 #include <signal.h>
21 #include <string.h>
22 #include <unistd.h>
23
24 #include <sys/prctl.h>
25 #ifndef PR_SET_NO_NEW_PRIVS
26 # define PR_SET_NO_NEW_PRIVS 38
27 #endif
28
29 #include <linux/unistd.h>
30 #include <linux/audit.h>
31 #include <linux/filter.h>
32
33 #ifdef HAVE_LINUX_SECCOMP_H
34 # include <linux/seccomp.h>
35 #endif
36
37 #ifndef SECCOMP_MODE_FILTER
38 #define SECCOMP_MODE_FILTER     2 /* uses user-supplied filter. */
39 #define SECCOMP_RET_KILL        0x00000000U /* kill the task immediately */
40 #define SECCOMP_RET_TRAP        0x00030000U /* disallow and force a SIGSYS */
41 #define SECCOMP_RET_ERRNO       0x00050000U /* returns an errno */
42 #define SECCOMP_RET_LOG         0x00070000U
43 #define SECCOMP_RET_ALLOW       0x7fff0000U /* allow */
44 #define SECCOMP_RET_ERROR(x)    (SECCOMP_RET_ERRNO | ((x) & 0x0000ffffU))
45 #define SECCOMP_RET_LOGGER(x)   (SECCOMP_RET_LOG | ((x) & 0x0000ffffU))
46
47 struct seccomp_data {
48     int nr;
49     __u32 arch;
50     __u64 instruction_pointer;
51     __u64 args[6];
52 };
53 #endif
54
55 #ifndef SYS_SECCOMP
56 # define SYS_SECCOMP 1
57 #endif
58
59 #define syscall_nr (offsetof(struct seccomp_data, nr))
60 #define arch_nr (offsetof(struct seccomp_data, arch))
61
62 #if defined(__i386__)
63 # define REG_SYSCALL    REG_EAX
64 # define ARCH_NR        AUDIT_ARCH_I386
65 #elif defined(__x86_64__)
66 # define REG_SYSCALL    REG_RAX
67 # define ARCH_NR        AUDIT_ARCH_X86_64
68 #elif defined(__mips__)
69 # define REG_SYSCALL    regs[2]
70 # define ARCH_NR        AUDIT_ARCH_MIPSEL
71 #else
72 # warning "Platform does not support seccomp filter yet"
73 # define REG_SYSCALL    0
74 # define ARCH_NR        0
75 #endif
76
77 #endif /* _SECCOMP_BPF_H_ */