diff options
Diffstat (limited to 'kernel/sys.c')
| -rw-r--r-- | kernel/sys.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/kernel/sys.c b/kernel/sys.c index e7006eb6c1e4..ba0ae8eea6fb 100644 --- a/kernel/sys.c +++ b/kernel/sys.c | |||
| @@ -1908,7 +1908,7 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3, | |||
| 1908 | error = prctl_get_seccomp(); | 1908 | error = prctl_get_seccomp(); |
| 1909 | break; | 1909 | break; |
| 1910 | case PR_SET_SECCOMP: | 1910 | case PR_SET_SECCOMP: |
| 1911 | error = prctl_set_seccomp(arg2); | 1911 | error = prctl_set_seccomp(arg2, (char __user *)arg3); |
| 1912 | break; | 1912 | break; |
| 1913 | case PR_GET_TSC: | 1913 | case PR_GET_TSC: |
| 1914 | error = GET_TSC_CTL(arg2); | 1914 | error = GET_TSC_CTL(arg2); |
| @@ -1979,6 +1979,16 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3, | |||
| 1979 | error = put_user(me->signal->is_child_subreaper, | 1979 | error = put_user(me->signal->is_child_subreaper, |
| 1980 | (int __user *) arg2); | 1980 | (int __user *) arg2); |
| 1981 | break; | 1981 | break; |
| 1982 | case PR_SET_NO_NEW_PRIVS: | ||
| 1983 | if (arg2 != 1 || arg3 || arg4 || arg5) | ||
| 1984 | return -EINVAL; | ||
| 1985 | |||
| 1986 | current->no_new_privs = 1; | ||
| 1987 | break; | ||
| 1988 | case PR_GET_NO_NEW_PRIVS: | ||
| 1989 | if (arg2 || arg3 || arg4 || arg5) | ||
| 1990 | return -EINVAL; | ||
| 1991 | return current->no_new_privs ? 1 : 0; | ||
| 1982 | default: | 1992 | default: |
| 1983 | error = -EINVAL; | 1993 | error = -EINVAL; |
| 1984 | break; | 1994 | break; |
