diff options
author | Kees Cook <keescook@chromium.org> | 2016-06-02 13:15:52 -0700 |
---|---|---|
committer | Kees Cook <keescook@chromium.org> | 2016-06-14 10:54:44 -0700 |
commit | 375f0183047109b98658d539db6ff22a6ac24abc (patch) | |
tree | 494f1be06453a340e0c1a465fbb4952e55e851e2 /arch/parisc | |
parent | 2ac3c8d18ed136827ad41786f30c6ed396429660 (diff) | |
download | lwn-375f0183047109b98658d539db6ff22a6ac24abc.tar.gz lwn-375f0183047109b98658d539db6ff22a6ac24abc.zip |
parisc/ptrace: run seccomp after ptrace
Close the hole where ptrace can change a syscall out from under seccomp.
Signed-off-by: Kees Cook <keescook@chromium.org>
Cc: "James E.J. Bottomley" <jejb@parisc-linux.org>
Cc: Helge Deller <deller@gmx.de>
Cc: linux-parisc@vger.kernel.org
Diffstat (limited to 'arch/parisc')
-rw-r--r-- | arch/parisc/kernel/ptrace.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/arch/parisc/kernel/ptrace.c b/arch/parisc/kernel/ptrace.c index 8edc47c0b98e..e02d7b4d2b69 100644 --- a/arch/parisc/kernel/ptrace.c +++ b/arch/parisc/kernel/ptrace.c @@ -311,10 +311,6 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request, long do_syscall_trace_enter(struct pt_regs *regs) { - /* Do the secure computing check first. */ - if (secure_computing(NULL) == -1) - return -1; - if (test_thread_flag(TIF_SYSCALL_TRACE) && tracehook_report_syscall_entry(regs)) { /* @@ -325,6 +321,11 @@ long do_syscall_trace_enter(struct pt_regs *regs) regs->gr[20] = -1UL; goto out; } + + /* Do the secure computing check after ptrace. */ + if (secure_computing(NULL) == -1) + return -1; + #ifdef CONFIG_HAVE_SYSCALL_TRACEPOINTS if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT))) trace_sys_enter(regs, regs->gr[20]); |