diff options
author | Kees Cook <keescook@chromium.org> | 2014-05-21 18:23:46 -0400 |
---|---|---|
committer | Kees Cook <keescook@chromium.org> | 2014-07-18 15:13:38 -0400 |
commit | 1d4457f99928a968767f6405b4a1f50845aa15fd (patch) | |
tree | 522641b08f4a465035910a74a3871ad38e62df01 /kernel | |
parent | 8855d608c145c1ca0e26f4da00741080bb49d80d (diff) |
sched: move no_new_privs into new atomic flags
Since seccomp transitions between threads requires updates to the
no_new_privs flag to be atomic, the flag must be part of an atomic flag
set. This moves the nnp flag into a separate task field, and introduces
accessors.
Signed-off-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Oleg Nesterov <oleg@redhat.com>
Reviewed-by: Andy Lutomirski <luto@amacapital.net>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/seccomp.c | 2 | ||||
-rw-r--r-- | kernel/sys.c | 4 |
2 files changed, 3 insertions, 3 deletions
diff --git a/kernel/seccomp.c b/kernel/seccomp.c index f0652578af75..d2596136b0d1 100644 --- a/kernel/seccomp.c +++ b/kernel/seccomp.c | |||
@@ -241,7 +241,7 @@ static long seccomp_attach_filter(struct sock_fprog *fprog) | |||
241 | * This avoids scenarios where unprivileged tasks can affect the | 241 | * This avoids scenarios where unprivileged tasks can affect the |
242 | * behavior of privileged children. | 242 | * behavior of privileged children. |
243 | */ | 243 | */ |
244 | if (!current->no_new_privs && | 244 | if (!task_no_new_privs(current) && |
245 | security_capable_noaudit(current_cred(), current_user_ns(), | 245 | security_capable_noaudit(current_cred(), current_user_ns(), |
246 | CAP_SYS_ADMIN) != 0) | 246 | CAP_SYS_ADMIN) != 0) |
247 | return -EACCES; | 247 | return -EACCES; |
diff --git a/kernel/sys.c b/kernel/sys.c index 66a751ebf9d9..ce8129192a26 100644 --- a/kernel/sys.c +++ b/kernel/sys.c | |||
@@ -1990,12 +1990,12 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3, | |||
1990 | if (arg2 != 1 || arg3 || arg4 || arg5) | 1990 | if (arg2 != 1 || arg3 || arg4 || arg5) |
1991 | return -EINVAL; | 1991 | return -EINVAL; |
1992 | 1992 | ||
1993 | current->no_new_privs = 1; | 1993 | task_set_no_new_privs(current); |
1994 | break; | 1994 | break; |
1995 | case PR_GET_NO_NEW_PRIVS: | 1995 | case PR_GET_NO_NEW_PRIVS: |
1996 | if (arg2 || arg3 || arg4 || arg5) | 1996 | if (arg2 || arg3 || arg4 || arg5) |
1997 | return -EINVAL; | 1997 | return -EINVAL; |
1998 | return current->no_new_privs ? 1 : 0; | 1998 | return task_no_new_privs(current) ? 1 : 0; |
1999 | case PR_GET_THP_DISABLE: | 1999 | case PR_GET_THP_DISABLE: |
2000 | if (arg2 || arg3 || arg4 || arg5) | 2000 | if (arg2 || arg3 || arg4 || arg5) |
2001 | return -EINVAL; | 2001 | return -EINVAL; |