diff options
Diffstat (limited to 'kernel/sys.c')
| -rw-r--r-- | kernel/sys.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/kernel/sys.c b/kernel/sys.c index 872271ccc384..4d141ae3e802 100644 --- a/kernel/sys.c +++ b/kernel/sys.c | |||
| @@ -31,10 +31,12 @@ | |||
| 31 | #include <linux/cn_proc.h> | 31 | #include <linux/cn_proc.h> |
| 32 | #include <linux/getcpu.h> | 32 | #include <linux/getcpu.h> |
| 33 | #include <linux/task_io_accounting_ops.h> | 33 | #include <linux/task_io_accounting_ops.h> |
| 34 | #include <linux/seccomp.h> | ||
| 34 | 35 | ||
| 35 | #include <linux/compat.h> | 36 | #include <linux/compat.h> |
| 36 | #include <linux/syscalls.h> | 37 | #include <linux/syscalls.h> |
| 37 | #include <linux/kprobes.h> | 38 | #include <linux/kprobes.h> |
| 39 | #include <linux/user_namespace.h> | ||
| 38 | 40 | ||
| 39 | #include <asm/uaccess.h> | 41 | #include <asm/uaccess.h> |
| 40 | #include <asm/io.h> | 42 | #include <asm/io.h> |
| @@ -1078,13 +1080,13 @@ static int set_user(uid_t new_ruid, int dumpclear) | |||
| 1078 | { | 1080 | { |
| 1079 | struct user_struct *new_user; | 1081 | struct user_struct *new_user; |
| 1080 | 1082 | ||
| 1081 | new_user = alloc_uid(new_ruid); | 1083 | new_user = alloc_uid(current->nsproxy->user_ns, new_ruid); |
| 1082 | if (!new_user) | 1084 | if (!new_user) |
| 1083 | return -EAGAIN; | 1085 | return -EAGAIN; |
| 1084 | 1086 | ||
| 1085 | if (atomic_read(&new_user->processes) >= | 1087 | if (atomic_read(&new_user->processes) >= |
| 1086 | current->signal->rlim[RLIMIT_NPROC].rlim_cur && | 1088 | current->signal->rlim[RLIMIT_NPROC].rlim_cur && |
| 1087 | new_user != &root_user) { | 1089 | new_user != current->nsproxy->user_ns->root_user) { |
| 1088 | free_uid(new_user); | 1090 | free_uid(new_user); |
| 1089 | return -EAGAIN; | 1091 | return -EAGAIN; |
| 1090 | } | 1092 | } |
| @@ -2241,6 +2243,13 @@ asmlinkage long sys_prctl(int option, unsigned long arg2, unsigned long arg3, | |||
| 2241 | error = SET_ENDIAN(current, arg2); | 2243 | error = SET_ENDIAN(current, arg2); |
| 2242 | break; | 2244 | break; |
| 2243 | 2245 | ||
| 2246 | case PR_GET_SECCOMP: | ||
| 2247 | error = prctl_get_seccomp(); | ||
| 2248 | break; | ||
| 2249 | case PR_SET_SECCOMP: | ||
| 2250 | error = prctl_set_seccomp(arg2); | ||
| 2251 | break; | ||
| 2252 | |||
| 2244 | default: | 2253 | default: |
| 2245 | error = -EINVAL; | 2254 | error = -EINVAL; |
| 2246 | break; | 2255 | break; |
