diff options
Diffstat (limited to 'kernel/seccomp.c')
| -rw-r--r-- | kernel/seccomp.c | 26 | 
1 files changed, 26 insertions, 0 deletions
diff --git a/kernel/seccomp.c b/kernel/seccomp.c index c3391b6020e..1dfa8a50972 100644 --- a/kernel/seccomp.c +++ b/kernel/seccomp.c  | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | #include <linux/sched.h> | 10 | #include <linux/sched.h> | 
| 11 | 11 | ||
| 12 | /* #define SECCOMP_DEBUG 1 */ | 12 | /* #define SECCOMP_DEBUG 1 */ | 
| 13 | #define NR_SECCOMP_MODES 1 | ||
| 13 | 14 | ||
| 14 | /* | 15 | /* | 
| 15 | * Secure computing mode 1 allows only read/write/exit/sigreturn. | 16 | * Secure computing mode 1 allows only read/write/exit/sigreturn. | 
| @@ -54,3 +55,28 @@ void __secure_computing(int this_syscall) | |||
| 54 | #endif | 55 | #endif | 
| 55 | do_exit(SIGKILL); | 56 | do_exit(SIGKILL); | 
| 56 | } | 57 | } | 
| 58 | |||
| 59 | long prctl_get_seccomp(void) | ||
| 60 | { | ||
| 61 | return current->seccomp.mode; | ||
| 62 | } | ||
| 63 | |||
| 64 | long prctl_set_seccomp(unsigned long seccomp_mode) | ||
| 65 | { | ||
| 66 | long ret; | ||
| 67 | |||
| 68 | /* can set it only once to be even more secure */ | ||
| 69 | ret = -EPERM; | ||
| 70 | if (unlikely(current->seccomp.mode)) | ||
| 71 | goto out; | ||
| 72 | |||
| 73 | ret = -EINVAL; | ||
| 74 | if (seccomp_mode && seccomp_mode <= NR_SECCOMP_MODES) { | ||
| 75 | current->seccomp.mode = seccomp_mode; | ||
| 76 | set_thread_flag(TIF_SECCOMP); | ||
| 77 | ret = 0; | ||
| 78 | } | ||
| 79 | |||
| 80 | out: | ||
| 81 | return ret; | ||
| 82 | } | ||
