Home | History | Annotate | Download | only in webtry
      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 (at) chromium.org>
      5  * Authors:
      6  *  Will Drewry <wad (at) chromium.org>
      7  *  Kees Cook <keescook (at) 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  * A stripped down version of the file found in this tutorial: http://outflux.net/teach-seccomp/.
     13  */
     14 #ifndef _SECCOMP_BPF_H_
     15 #define _SECCOMP_BPF_H_
     16 
     17 #ifndef SK_UNSAFE_BUILD_DESKTOP_ONLY
     18 
     19 #define _GNU_SOURCE 1
     20 #include <stdio.h>
     21 #include <stddef.h>
     22 #include <stdlib.h>
     23 #include <errno.h>
     24 #include <signal.h>
     25 #include <string.h>
     26 #include <unistd.h>
     27 
     28 #include <sys/prctl.h>
     29 #ifndef PR_SET_NO_NEW_PRIVS
     30 # define PR_SET_NO_NEW_PRIVS 38
     31 #endif
     32 
     33 #include <linux/unistd.h>
     34 #include <linux/audit.h>
     35 #include <linux/filter.h>
     36 #ifdef HAVE_LINUX_SECCOMP_H
     37 # include <linux/seccomp.h>
     38 #endif
     39 #ifndef SECCOMP_MODE_FILTER
     40 # define SECCOMP_MODE_FILTER             2 /* uses user-supplied filter. */
     41 # define SECCOMP_RET_KILL      0x00000000U /* kill the task immediately */
     42 # define SECCOMP_RET_TRAP      0x00030000U /* disallow and force a SIGSYS */
     43 # define SECCOMP_RET_ALLOW     0x7fff0000U /* allow */
     44 struct seccomp_data {
     45     int nr;
     46     __u32 arch;
     47     __u64 instruction_pointer;
     48     __u64 args[6];
     49 };
     50 #endif
     51 #ifndef SYS_SECCOMP
     52 # define SYS_SECCOMP 1
     53 #endif
     54 
     55 #define syscall_nr (offsetof(struct seccomp_data, nr))
     56 
     57 #define EXAMINE_SYSCALL \
     58     BPF_STMT(BPF_LD+BPF_W+BPF_ABS, syscall_nr)
     59 
     60 #define ALLOW_SYSCALL(name) \
     61     BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, __NR_##name, 0, 1), \
     62     BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_ALLOW)
     63 
     64 #define KILL_PROCESS \
     65     BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_KILL)
     66 
     67 #endif /* SK_UNSAFE_BUILD_DESKTOP_ONLY */
     68 
     69 #endif /* _SECCOMP_BPF_H_ */
     70