move seccomp from /proc to a prctl
This reduces the memory footprint and it enforces that only the current task can enable seccomp on itself (this is a requirement for a strightforward [modulo preempt ;) ] TIF_NOTSC implementation). Signed-off-by: Andrea Arcangeli <andrea@cpushare.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
be0ef957c9
commit
1d9d02feee
@ -10,6 +10,7 @@
|
||||
#include <linux/sched.h>
|
||||
|
||||
/* #define SECCOMP_DEBUG 1 */
|
||||
#define NR_SECCOMP_MODES 1
|
||||
|
||||
/*
|
||||
* Secure computing mode 1 allows only read/write/exit/sigreturn.
|
||||
@ -54,3 +55,28 @@ void __secure_computing(int this_syscall)
|
||||
#endif
|
||||
do_exit(SIGKILL);
|
||||
}
|
||||
|
||||
long prctl_get_seccomp(void)
|
||||
{
|
||||
return current->seccomp.mode;
|
||||
}
|
||||
|
||||
long prctl_set_seccomp(unsigned long seccomp_mode)
|
||||
{
|
||||
long ret;
|
||||
|
||||
/* can set it only once to be even more secure */
|
||||
ret = -EPERM;
|
||||
if (unlikely(current->seccomp.mode))
|
||||
goto out;
|
||||
|
||||
ret = -EINVAL;
|
||||
if (seccomp_mode && seccomp_mode <= NR_SECCOMP_MODES) {
|
||||
current->seccomp.mode = seccomp_mode;
|
||||
set_thread_flag(TIF_SECCOMP);
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include <linux/cn_proc.h>
|
||||
#include <linux/getcpu.h>
|
||||
#include <linux/task_io_accounting_ops.h>
|
||||
#include <linux/seccomp.h>
|
||||
|
||||
#include <linux/compat.h>
|
||||
#include <linux/syscalls.h>
|
||||
@ -2242,6 +2243,13 @@ asmlinkage long sys_prctl(int option, unsigned long arg2, unsigned long arg3,
|
||||
error = SET_ENDIAN(current, arg2);
|
||||
break;
|
||||
|
||||
case PR_GET_SECCOMP:
|
||||
error = prctl_get_seccomp();
|
||||
break;
|
||||
case PR_SET_SECCOMP:
|
||||
error = prctl_set_seccomp(arg2);
|
||||
break;
|
||||
|
||||
default:
|
||||
error = -EINVAL;
|
||||
break;
|
||||
|
Reference in New Issue
Block a user