Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1365998 > unrolled thread
| Started by | Matt Redfearn <matt.redfearn@imgtec.com> |
|---|---|
| First post | 2016-03-29 10:40 +0200 |
| Last post | 2016-03-31 11:00 +0200 |
| Articles | 8 — 2 participants |
Back to article view | Back to linux.kernel
[PATCH v2 0/6] MIPS seccomp_bpf self test and fixups Matt Redfearn <matt.redfearn@imgtec.com> - 2016-03-29 10:40 +0200
[PATCH v2 4/6] seccomp: Get compat syscalls from asm-generic header Matt Redfearn <matt.redfearn@imgtec.com> - 2016-03-29 10:40 +0200
[PATCH v2 3/6] MIPS: scall: Handle seccomp filters which redirect syscalls Matt Redfearn <matt.redfearn@imgtec.com> - 2016-03-29 10:40 +0200
[PATCH v2 6/6] secomp: Constify mode1 syscall whitelist Matt Redfearn <matt.redfearn@imgtec.com> - 2016-03-29 10:40 +0200
[PATCH v2 5/6] MIPS: seccomp: Support compat with both O32 and N32 Matt Redfearn <matt.redfearn@imgtec.com> - 2016-03-29 10:40 +0200
[PATCH v2 2/6] MIPS: Support sending SIG_SYS to 32bit userspace from 64bit kernel Matt Redfearn <matt.redfearn@imgtec.com> - 2016-03-29 10:40 +0200
Re: [PATCH v2 0/6] MIPS seccomp_bpf self test and fixups Kees Cook <keescook@chromium.org> - 2016-03-30 07:10 +0200
Re: [PATCH v2 0/6] MIPS seccomp_bpf self test and fixups Matt Redfearn <matt.redfearn@imgtec.com> - 2016-03-31 11:00 +0200
| From | Matt Redfearn <matt.redfearn@imgtec.com> |
|---|---|
| Date | 2016-03-29 10:40 +0200 |
| Subject | [PATCH v2 0/6] MIPS seccomp_bpf self test and fixups |
| Message-ID | <rhXlT-3nw-5@gated-at.bofh.it> |
These patches imporve seccomp support on MIPS. Firstly support is added for building the seccomp_bpf self test for MIPS. The initial results of these tests were: 32bit kernel O32 userspace before: 48 / 48 pass 64bit kernel O32 userspace before: 47 / 48 pass Failures: TRAP.Handler 64bit kernel N32 userspace before: 44 / 48 pass Failures: global.mode_strict_support, TRAP.handler, TRACE_syscall.syscall_redirected, TRACE_syscall.syscall_dropped 64bit kernel N64 userspace before: 46 / 48 pass Failures: TRACE_syscall.syscall_redirected, TRACE_syscall.syscall_dropped The subsequent patches fix issues that were causing the above tests to fail. With these fixes, the results are: 32bit kernel O32 userspace after: 48 / 48 64bit kernel O32 userspace after: 48 / 48 64bit kernel N32 userspace after: 48 / 48 64bit kernel N64 userspace after: 48 / 48 Thanks, Matt Changes in v2: - Tested on additional platforms - Replace __NR_syscall which isn't defined for N32 / N64 ABIs Matt Redfearn (6): selftests/seccomp: add MIPS self-test support MIPS: Support sending SIG_SYS to 32bit userspace from 64bit kernel MIPS: scall: Handle seccomp filters which redirect syscalls seccomp: Get compat syscalls from asm-generic header MIPS: seccomp: Support compat with both O32 and N32 secomp: Constify mode1 syscall whitelist arch/mips/include/asm/seccomp.h | 47 +++++++++++++++------------ arch/mips/kernel/scall32-o32.S | 11 +++---- arch/mips/kernel/scall64-64.S | 3 +- arch/mips/kernel/scall64-n32.S | 14 +++++--- arch/mips/kernel/scall64-o32.S | 14 +++++--- arch/mips/kernel/signal32.c | 6 ++++ include/asm-generic/seccomp.h | 14 ++++++++ kernel/seccomp.c | 13 ++------ tools/testing/selftests/seccomp/seccomp_bpf.c | 30 +++++++++++++++-- 9 files changed, 101 insertions(+), 51 deletions(-) -- 2.5.0
[toc] | [next] | [standalone]
| From | Matt Redfearn <matt.redfearn@imgtec.com> |
|---|---|
| Date | 2016-03-29 10:40 +0200 |
| Subject | [PATCH v2 4/6] seccomp: Get compat syscalls from asm-generic header |
| Message-ID | <rhXlT-3nw-11@gated-at.bofh.it> |
| In reply to | #1365998 |
Move retrieval of compat syscall numbers into inline function defined in
asm-generic header so that arches may override it.
Suggested-by: Paul Burton <paul.burton@imgtec.com>
Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com>
---
Changes in v2: None
include/asm-generic/seccomp.h | 14 ++++++++++++++
kernel/seccomp.c | 9 +--------
2 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/include/asm-generic/seccomp.h b/include/asm-generic/seccomp.h
index c9ccafa0d99a..e74072d23e69 100644
--- a/include/asm-generic/seccomp.h
+++ b/include/asm-generic/seccomp.h
@@ -29,4 +29,18 @@
#define __NR_seccomp_sigreturn __NR_rt_sigreturn
#endif
+#ifdef CONFIG_COMPAT
+#ifndef get_compat_mode1_syscalls
+static inline const int *get_compat_mode1_syscalls(void)
+{
+ static const int mode1_syscalls_32[] = {
+ __NR_seccomp_read_32, __NR_seccomp_write_32,
+ __NR_seccomp_exit_32, __NR_seccomp_sigreturn_32,
+ 0, /* null terminated */
+ };
+ return mode1_syscalls_32;
+}
+#endif
+#endif /* CONFIG_COMPAT */
+
#endif /* _ASM_GENERIC_SECCOMP_H */
diff --git a/kernel/seccomp.c b/kernel/seccomp.c
index 15a1795bbba1..b0082c14764f 100644
--- a/kernel/seccomp.c
+++ b/kernel/seccomp.c
@@ -518,19 +518,12 @@ static int mode1_syscalls[] = {
0, /* null terminated */
};
-#ifdef CONFIG_COMPAT
-static int mode1_syscalls_32[] = {
- __NR_seccomp_read_32, __NR_seccomp_write_32, __NR_seccomp_exit_32, __NR_seccomp_sigreturn_32,
- 0, /* null terminated */
-};
-#endif
-
static void __secure_computing_strict(int this_syscall)
{
int *syscall_whitelist = mode1_syscalls;
#ifdef CONFIG_COMPAT
if (is_compat_task())
- syscall_whitelist = mode1_syscalls_32;
+ syscall_whitelist = get_compat_mode1_syscalls();
#endif
do {
if (*syscall_whitelist == this_syscall)
--
2.5.0
[toc] | [prev] | [next] | [standalone]
| From | Matt Redfearn <matt.redfearn@imgtec.com> |
|---|---|
| Date | 2016-03-29 10:40 +0200 |
| Subject | [PATCH v2 3/6] MIPS: scall: Handle seccomp filters which redirect syscalls |
| Message-ID | <rhXlT-3nw-13@gated-at.bofh.it> |
| In reply to | #1365998 |
Commit d218af78492a ("MIPS: scall: Always run the seccomp syscall
filters") modified the syscall code to always call the seccomp filters,
but missed the case where a filter may redirect the syscall, as
revealed by the seccomp_bpf self test.
The syscall path now restores the syscall from the stack after the
filter rather than saving it locally. Syscall number checking and
syscall function table lookup is done after the filter may have run such
that redirected syscalls are also checked, and executed.
The regular path of syscall number checking and pointer lookup is also
made more consistent between ABIs with scall64-64.S being the reference.
With this patch in place, the seccomp_bpf self test now passes
TRACE_syscall.syscall_redirected and TRACE_syscall.syscall_dropped on
all MIPS ABIs.
Fixes: d218af78492a ("MIPS: scall: Always run the seccomp syscall filters")
Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com>
Cc: linux-mips@linux-mips.org
---
Changes in v2: None
arch/mips/kernel/scall32-o32.S | 11 +++++------
arch/mips/kernel/scall64-64.S | 3 +--
arch/mips/kernel/scall64-n32.S | 14 +++++++++-----
arch/mips/kernel/scall64-o32.S | 14 +++++++++-----
4 files changed, 24 insertions(+), 18 deletions(-)
diff --git a/arch/mips/kernel/scall32-o32.S b/arch/mips/kernel/scall32-o32.S
index a56317444bda..6c1b5e085f2d 100644
--- a/arch/mips/kernel/scall32-o32.S
+++ b/arch/mips/kernel/scall32-o32.S
@@ -35,7 +35,6 @@ NESTED(handle_sys, PT_SIZE, sp)
lw t1, PT_EPC(sp) # skip syscall on return
- subu v0, v0, __NR_O32_Linux # check syscall number
addiu t1, 4 # skip to next instruction
sw t1, PT_EPC(sp)
@@ -89,6 +88,7 @@ loads_done:
and t0, t1
bnez t0, syscall_trace_entry # -> yes
syscall_common:
+ subu v0, v0, __NR_O32_Linux # check syscall number
sltiu t0, v0, __NR_O32_Linux_syscalls + 1
beqz t0, illegal_syscall
@@ -118,24 +118,23 @@ o32_syscall_exit:
syscall_trace_entry:
SAVE_STATIC
- move s0, v0
move a0, sp
/*
* syscall number is in v0 unless we called syscall(__NR_###)
* where the real syscall number is in a0
*/
- addiu a1, v0, __NR_O32_Linux
- bnez v0, 1f /* __NR_syscall at offset 0 */
+ move a1, v0
+ subu t2, v0, __NR_O32_Linux
+ bnez t2, 1f /* __NR_syscall at offset 0 */
lw a1, PT_R4(sp)
1: jal syscall_trace_enter
bltz v0, 1f # seccomp failed? Skip syscall
- move v0, s0 # restore syscall
-
RESTORE_STATIC
+ lw v0, PT_R2(sp) # Restore syscall (maybe modified)
lw a0, PT_R4(sp) # Restore argument registers
lw a1, PT_R5(sp)
lw a2, PT_R6(sp)
diff --git a/arch/mips/kernel/scall64-64.S b/arch/mips/kernel/scall64-64.S
index 2b2dc14610d0..ede49e35d6a6 100644
--- a/arch/mips/kernel/scall64-64.S
+++ b/arch/mips/kernel/scall64-64.S
@@ -82,15 +82,14 @@ n64_syscall_exit:
syscall_trace_entry:
SAVE_STATIC
- move s0, v0
move a0, sp
move a1, v0
jal syscall_trace_enter
bltz v0, 1f # seccomp failed? Skip syscall
- move v0, s0
RESTORE_STATIC
+ ld v0, PT_R2(sp) # Restore syscall (maybe modified)
ld a0, PT_R4(sp) # Restore argument registers
ld a1, PT_R5(sp)
ld a2, PT_R6(sp)
diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S
index 2bf5c8593d91..f75a6e19b902 100644
--- a/arch/mips/kernel/scall64-n32.S
+++ b/arch/mips/kernel/scall64-n32.S
@@ -42,9 +42,6 @@ NESTED(handle_sysn32, PT_SIZE, sp)
#endif
beqz t0, not_n32_scall
- dsll t0, v0, 3 # offset into table
- ld t2, (sysn32_call_table - (__NR_N32_Linux * 8))(t0)
-
sd a3, PT_R26(sp) # save a3 for syscall restarting
li t1, _TIF_WORK_SYSCALL_ENTRY
@@ -53,6 +50,9 @@ NESTED(handle_sysn32, PT_SIZE, sp)
bnez t0, n32_syscall_trace_entry
syscall_common:
+ dsll t0, v0, 3 # offset into table
+ ld t2, (sysn32_call_table - (__NR_N32_Linux * 8))(t0)
+
jalr t2 # Do The Real Thing (TM)
li t0, -EMAXERRNO - 1 # error?
@@ -71,21 +71,25 @@ syscall_common:
n32_syscall_trace_entry:
SAVE_STATIC
- move s0, t2
move a0, sp
move a1, v0
jal syscall_trace_enter
bltz v0, 1f # seccomp failed? Skip syscall
- move t2, s0
RESTORE_STATIC
+ ld v0, PT_R2(sp) # Restore syscall (maybe modified)
ld a0, PT_R4(sp) # Restore argument registers
ld a1, PT_R5(sp)
ld a2, PT_R6(sp)
ld a3, PT_R7(sp)
ld a4, PT_R8(sp)
ld a5, PT_R9(sp)
+
+ dsubu t2, v0, __NR_N32_Linux # check (new) syscall number
+ sltiu t0, t2, __NR_N32_Linux_syscalls + 1
+ beqz t0, not_n32_scall
+
j syscall_common
1: j syscall_exit
diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S
index c5b759e584c7..db224e7b995c 100644
--- a/arch/mips/kernel/scall64-o32.S
+++ b/arch/mips/kernel/scall64-o32.S
@@ -52,9 +52,6 @@ NESTED(handle_sys, PT_SIZE, sp)
sll a2, a2, 0
sll a3, a3, 0
- dsll t0, v0, 3 # offset into table
- ld t2, (sys32_call_table - (__NR_O32_Linux * 8))(t0)
-
sd a3, PT_R26(sp) # save a3 for syscall restarting
/*
@@ -88,6 +85,9 @@ loads_done:
bnez t0, trace_a_syscall
syscall_common:
+ dsll t0, v0, 3 # offset into table
+ ld t2, (sys32_call_table - (__NR_O32_Linux * 8))(t0)
+
jalr t2 # Do The Real Thing (TM)
li t0, -EMAXERRNO - 1 # error?
@@ -112,7 +112,6 @@ trace_a_syscall:
sd a6, PT_R10(sp)
sd a7, PT_R11(sp) # For indirect syscalls
- move s0, t2 # Save syscall pointer
move a0, sp
/*
* absolute syscall number is in v0 unless we called syscall(__NR_###)
@@ -133,8 +132,8 @@ trace_a_syscall:
bltz v0, 1f # seccomp failed? Skip syscall
- move t2, s0
RESTORE_STATIC
+ ld v0, PT_R2(sp) # Restore syscall (maybe modified)
ld a0, PT_R4(sp) # Restore argument registers
ld a1, PT_R5(sp)
ld a2, PT_R6(sp)
@@ -143,6 +142,11 @@ trace_a_syscall:
ld a5, PT_R9(sp)
ld a6, PT_R10(sp)
ld a7, PT_R11(sp) # For indirect syscalls
+
+ dsubu t0, v0, __NR_O32_Linux # check (new) syscall number
+ sltiu t0, t0, __NR_O32_Linux_syscalls + 1
+ beqz t0, not_o32_scall
+
j syscall_common
1: j syscall_exit
--
2.5.0
[toc] | [prev] | [next] | [standalone]
| From | Matt Redfearn <matt.redfearn@imgtec.com> |
|---|---|
| Date | 2016-03-29 10:40 +0200 |
| Subject | [PATCH v2 6/6] secomp: Constify mode1 syscall whitelist |
| Message-ID | <rhXlU-3nw-27@gated-at.bofh.it> |
| In reply to | #1365998 |
These values are constant and should be marked as such.
Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com>
---
Changes in v2: None
kernel/seccomp.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/kernel/seccomp.c b/kernel/seccomp.c
index b0082c14764f..9243d686d11a 100644
--- a/kernel/seccomp.c
+++ b/kernel/seccomp.c
@@ -513,14 +513,14 @@ static void seccomp_send_sigsys(int syscall, int reason)
* To be fully secure this must be combined with rlimit
* to limit the stack allocations too.
*/
-static int mode1_syscalls[] = {
+static const int mode1_syscalls[] = {
__NR_seccomp_read, __NR_seccomp_write, __NR_seccomp_exit, __NR_seccomp_sigreturn,
0, /* null terminated */
};
static void __secure_computing_strict(int this_syscall)
{
- int *syscall_whitelist = mode1_syscalls;
+ const int *syscall_whitelist = mode1_syscalls;
#ifdef CONFIG_COMPAT
if (is_compat_task())
syscall_whitelist = get_compat_mode1_syscalls();
--
2.5.0
[toc] | [prev] | [next] | [standalone]
| From | Matt Redfearn <matt.redfearn@imgtec.com> |
|---|---|
| Date | 2016-03-29 10:40 +0200 |
| Subject | [PATCH v2 5/6] MIPS: seccomp: Support compat with both O32 and N32 |
| Message-ID | <rhXlU-3nw-43@gated-at.bofh.it> |
| In reply to | #1365998 |
Previously the seccomp would only support strict mode on O32 userland
programs when the kernel had support for both O32 and N32 ABIs. Remove
kludge and support both ABIs.
With this patch in place, the seccomp_bpf self test now passes
global.mode_strict_support with N32 userland.
Suggested-by: Paul Burton <paul.burton@imgtec.com>
Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com>
---
Changes in v2: None
arch/mips/include/asm/seccomp.h | 47 +++++++++++++++++++++++------------------
1 file changed, 26 insertions(+), 21 deletions(-)
diff --git a/arch/mips/include/asm/seccomp.h b/arch/mips/include/asm/seccomp.h
index 1d8a2e2c75c1..684fb3a12ed3 100644
--- a/arch/mips/include/asm/seccomp.h
+++ b/arch/mips/include/asm/seccomp.h
@@ -2,27 +2,32 @@
#include <linux/unistd.h>
-/*
- * Kludge alert:
- *
- * The generic seccomp code currently allows only a single compat ABI. Until
- * this is fixed we priorize O32 as the compat ABI over N32.
- */
-#ifdef CONFIG_MIPS32_O32
-
-#define __NR_seccomp_read_32 4003
-#define __NR_seccomp_write_32 4004
-#define __NR_seccomp_exit_32 4001
-#define __NR_seccomp_sigreturn_32 4193 /* rt_sigreturn */
-
-#elif defined(CONFIG_MIPS32_N32)
-
-#define __NR_seccomp_read_32 6000
-#define __NR_seccomp_write_32 6001
-#define __NR_seccomp_exit_32 6058
-#define __NR_seccomp_sigreturn_32 6211 /* rt_sigreturn */
-
-#endif /* CONFIG_MIPS32_O32 */
+#ifdef CONFIG_COMPAT
+static inline const int *get_compat_mode1_syscalls(void)
+{
+ static const int syscalls_O32[] = {
+ __NR_O32_Linux + 3, __NR_O32_Linux + 4,
+ __NR_O32_Linux + 1, __NR_O32_Linux + 193,
+ 0, /* null terminated */
+ };
+ static const int syscalls_N32[] = {
+ __NR_N32_Linux + 0, __NR_N32_Linux + 1,
+ __NR_N32_Linux + 58, __NR_N32_Linux + 211,
+ 0, /* null terminated */
+ };
+
+ if (config_enabled(CONFIG_MIPS32_O32) && test_thread_flag(TIF_32BIT_REGS))
+ return syscalls_O32;
+
+ if (config_enabled(CONFIG_MIPS32_N32))
+ return syscalls_N32;
+
+ BUG();
+}
+
+#define get_compat_mode1_syscalls get_compat_mode1_syscalls
+
+#endif /* CONFIG_COMPAT */
#include <asm-generic/seccomp.h>
--
2.5.0
[toc] | [prev] | [next] | [standalone]
| From | Matt Redfearn <matt.redfearn@imgtec.com> |
|---|---|
| Date | 2016-03-29 10:40 +0200 |
| Subject | [PATCH v2 2/6] MIPS: Support sending SIG_SYS to 32bit userspace from 64bit kernel |
| Message-ID | <rhXlU-3nw-41@gated-at.bofh.it> |
| In reply to | #1365998 |
The seccomp_bpf self test revealed that a 64bit kernel delivered an invalid SIG_SYS to a 32bit userspace, because it was falling into the default of the switch statement. Add a case to handle delivering the signal. With this patch, the seccomp_bpf self test now passes the TRAP.handler case with O32 and N32 userlands. Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com> Cc: Paul Burton <paul.burton@imgtec.com> Cc: linux-mips@linux-mips.org --- Changes in v2: None arch/mips/kernel/signal32.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/arch/mips/kernel/signal32.c b/arch/mips/kernel/signal32.c index 4909639aa35b..78c8349d151c 100644 --- a/arch/mips/kernel/signal32.c +++ b/arch/mips/kernel/signal32.c @@ -227,6 +227,12 @@ int copy_siginfo_to_user32(compat_siginfo_t __user *to, const siginfo_t *from) err |= __put_user(from->si_uid, &to->si_uid); err |= __put_user(from->si_int, &to->si_int); break; + case __SI_SYS >> 16: + err |= __copy_to_user(&to->si_call_addr, &from->si_call_addr, + sizeof(compat_uptr_t)); + err |= __put_user(from->si_syscall, &to->si_syscall); + err |= __put_user(from->si_arch, &to->si_arch); + break; } } return err; -- 2.5.0
[toc] | [prev] | [next] | [standalone]
| From | Kees Cook <keescook@chromium.org> |
|---|---|
| Date | 2016-03-30 07:10 +0200 |
| Message-ID | <rigye-Aq-5@gated-at.bofh.it> |
| In reply to | #1365998 |
On Tue, Mar 29, 2016 at 1:35 AM, Matt Redfearn <matt.redfearn@imgtec.com> wrote: > These patches imporve seccomp support on MIPS. > > Firstly support is added for building the seccomp_bpf self test for > MIPS. The > initial results of these tests were: > > 32bit kernel O32 userspace before: 48 / 48 pass > 64bit kernel O32 userspace before: 47 / 48 pass > Failures: TRAP.Handler > 64bit kernel N32 userspace before: 44 / 48 pass > Failures: global.mode_strict_support, TRAP.handler, > TRACE_syscall.syscall_redirected, TRACE_syscall.syscall_dropped > 64bit kernel N64 userspace before: 46 / 48 pass > Failures: TRACE_syscall.syscall_redirected, > TRACE_syscall.syscall_dropped > > The subsequent patches fix issues that were causing the above tests to > fail. With > these fixes, the results are: > 32bit kernel O32 userspace after: 48 / 48 > 64bit kernel O32 userspace after: 48 / 48 > 64bit kernel N32 userspace after: 48 / 48 > 64bit kernel N64 userspace after: 48 / 48 > > Thanks, > Matt > > Changes in v2: > - Tested on additional platforms > - Replace __NR_syscall which isn't defined for N32 / N64 ABIs > > Matt Redfearn (6): > selftests/seccomp: add MIPS self-test support > MIPS: Support sending SIG_SYS to 32bit userspace from 64bit kernel > MIPS: scall: Handle seccomp filters which redirect syscalls > seccomp: Get compat syscalls from asm-generic header > MIPS: seccomp: Support compat with both O32 and N32 > secomp: Constify mode1 syscall whitelist > > arch/mips/include/asm/seccomp.h | 47 +++++++++++++++------------ > arch/mips/kernel/scall32-o32.S | 11 +++---- > arch/mips/kernel/scall64-64.S | 3 +- > arch/mips/kernel/scall64-n32.S | 14 +++++--- > arch/mips/kernel/scall64-o32.S | 14 +++++--- > arch/mips/kernel/signal32.c | 6 ++++ > include/asm-generic/seccomp.h | 14 ++++++++ > kernel/seccomp.c | 13 ++------ > tools/testing/selftests/seccomp/seccomp_bpf.c | 30 +++++++++++++++-- > 9 files changed, 101 insertions(+), 51 deletions(-) Thanks for digging into this! Consider all the seccomp pieces: Acked-by: Kees Cook <keescook@chromium.org> Probably best to carry it all in the MIPS tree, but if you want to me take pieces of it into my seccomp tree, I can do that. Up to you. :) -Kees -- Kees Cook Chrome OS & Brillo Security
[toc] | [prev] | [next] | [standalone]
| From | Matt Redfearn <matt.redfearn@imgtec.com> |
|---|---|
| Date | 2016-03-31 11:00 +0200 |
| Message-ID | <riGCn-2kC-33@gated-at.bofh.it> |
| In reply to | #1366894 |
On 30/03/16 06:06, Kees Cook wrote: > On Tue, Mar 29, 2016 at 1:35 AM, Matt Redfearn <matt.redfearn@imgtec.com> wrote: >> These patches imporve seccomp support on MIPS. >> >> Firstly support is added for building the seccomp_bpf self test for >> MIPS. The >> initial results of these tests were: >> >> 32bit kernel O32 userspace before: 48 / 48 pass >> 64bit kernel O32 userspace before: 47 / 48 pass >> Failures: TRAP.Handler >> 64bit kernel N32 userspace before: 44 / 48 pass >> Failures: global.mode_strict_support, TRAP.handler, >> TRACE_syscall.syscall_redirected, TRACE_syscall.syscall_dropped >> 64bit kernel N64 userspace before: 46 / 48 pass >> Failures: TRACE_syscall.syscall_redirected, >> TRACE_syscall.syscall_dropped >> >> The subsequent patches fix issues that were causing the above tests to >> fail. With >> these fixes, the results are: >> 32bit kernel O32 userspace after: 48 / 48 >> 64bit kernel O32 userspace after: 48 / 48 >> 64bit kernel N32 userspace after: 48 / 48 >> 64bit kernel N64 userspace after: 48 / 48 >> >> Thanks, >> Matt >> >> Changes in v2: >> - Tested on additional platforms >> - Replace __NR_syscall which isn't defined for N32 / N64 ABIs >> >> Matt Redfearn (6): >> selftests/seccomp: add MIPS self-test support >> MIPS: Support sending SIG_SYS to 32bit userspace from 64bit kernel >> MIPS: scall: Handle seccomp filters which redirect syscalls >> seccomp: Get compat syscalls from asm-generic header >> MIPS: seccomp: Support compat with both O32 and N32 >> secomp: Constify mode1 syscall whitelist >> >> arch/mips/include/asm/seccomp.h | 47 +++++++++++++++------------ >> arch/mips/kernel/scall32-o32.S | 11 +++---- >> arch/mips/kernel/scall64-64.S | 3 +- >> arch/mips/kernel/scall64-n32.S | 14 +++++--- >> arch/mips/kernel/scall64-o32.S | 14 +++++--- >> arch/mips/kernel/signal32.c | 6 ++++ >> include/asm-generic/seccomp.h | 14 ++++++++ >> kernel/seccomp.c | 13 ++------ >> tools/testing/selftests/seccomp/seccomp_bpf.c | 30 +++++++++++++++-- >> 9 files changed, 101 insertions(+), 51 deletions(-) > Thanks for digging into this! Consider all the seccomp pieces: > > Acked-by: Kees Cook <keescook@chromium.org> > > Probably best to carry it all in the MIPS tree, but if you want to me > take pieces of it into my seccomp tree, I can do that. Up to you. :) > > -Kees > Thanks Kees. Ralf is going to take it via the MIPS tree. Matt
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web