Commit 5c38065e authored by Andy Lutomirski's avatar Andy Lutomirski Committed by Linus Torvalds

seccomp: check in_compat_syscall, not is_compat_task, in strict mode

Seccomp wants to know the syscall bitness, not the caller task bitness,
when it selects the syscall whitelist.

As far as I know, this makes no difference on any architecture, so it's
not a security problem.  (It generates identical code everywhere except
sparc, and, on sparc, the syscall numbering is the same for both ABIs.)
Signed-off-by: default avatarAndy Lutomirski <luto@kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 203f7907
...@@ -395,7 +395,7 @@ seccomp_prepare_user_filter(const char __user *user_filter) ...@@ -395,7 +395,7 @@ seccomp_prepare_user_filter(const char __user *user_filter)
struct seccomp_filter *filter = ERR_PTR(-EFAULT); struct seccomp_filter *filter = ERR_PTR(-EFAULT);
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
if (is_compat_task()) { if (in_compat_syscall()) {
struct compat_sock_fprog fprog32; struct compat_sock_fprog fprog32;
if (copy_from_user(&fprog32, user_filter, sizeof(fprog32))) if (copy_from_user(&fprog32, user_filter, sizeof(fprog32)))
goto out; goto out;
...@@ -529,7 +529,7 @@ static void __secure_computing_strict(int this_syscall) ...@@ -529,7 +529,7 @@ static void __secure_computing_strict(int this_syscall)
{ {
int *syscall_whitelist = mode1_syscalls; int *syscall_whitelist = mode1_syscalls;
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
if (is_compat_task()) if (in_compat_syscall())
syscall_whitelist = mode1_syscalls_32; syscall_whitelist = mode1_syscalls_32;
#endif #endif
do { do {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment