diff options
author | Andrea Arcangeli <andrea@cpushare.com> | 2005-06-24 01:00:45 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-06-24 03:05:18 -0400 |
commit | 7286aa9b9ab35f20b1ff16d867f4535701df99b5 (patch) | |
tree | c816ea0350a0f0c7ac503c6020a6ea5398a59ee4 | |
parent | 16822e62053e73fa7def9decc38a7e287d27d980 (diff) |
[PATCH] ppc64: fix seccomp with 32-bit userland
The seccomp check has to happen when entering the syscall and not when
exiting it or regs->gpr[0] contains garabge during signal handling in
ppc64_rt_sigreturn (this actually might be a bug too, but an orthogonal
one, since we really have to run the check before invoking the syscall and
not after it).
Signed-off-by: Andrea Arcangeli <andrea@cpushare.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | arch/ppc64/kernel/ptrace.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/ppc64/kernel/ptrace.c b/arch/ppc64/kernel/ptrace.c index 9f8c6087ae56..2993f108d96d 100644 --- a/arch/ppc64/kernel/ptrace.c +++ b/arch/ppc64/kernel/ptrace.c | |||
@@ -305,6 +305,8 @@ static void do_syscall_trace(void) | |||
305 | 305 | ||
306 | void do_syscall_trace_enter(struct pt_regs *regs) | 306 | void do_syscall_trace_enter(struct pt_regs *regs) |
307 | { | 307 | { |
308 | secure_computing(regs->gpr[0]); | ||
309 | |||
308 | if (test_thread_flag(TIF_SYSCALL_TRACE) | 310 | if (test_thread_flag(TIF_SYSCALL_TRACE) |
309 | && (current->ptrace & PT_PTRACED)) | 311 | && (current->ptrace & PT_PTRACED)) |
310 | do_syscall_trace(); | 312 | do_syscall_trace(); |
@@ -320,8 +322,6 @@ void do_syscall_trace_enter(struct pt_regs *regs) | |||
320 | 322 | ||
321 | void do_syscall_trace_leave(struct pt_regs *regs) | 323 | void do_syscall_trace_leave(struct pt_regs *regs) |
322 | { | 324 | { |
323 | secure_computing(regs->gpr[0]); | ||
324 | |||
325 | if (unlikely(current->audit_context)) | 325 | if (unlikely(current->audit_context)) |
326 | audit_syscall_exit(current, | 326 | audit_syscall_exit(current, |
327 | (regs->ccr&0x1000)?AUDITSC_FAILURE:AUDITSC_SUCCESS, | 327 | (regs->ccr&0x1000)?AUDITSC_FAILURE:AUDITSC_SUCCESS, |