Skip to content

Commit

Permalink
x86/ptrace: run seccomp after ptrace
Browse files Browse the repository at this point in the history
This moves seccomp after ptrace on x86 to that seccomp can catch changes
made by ptrace. Emulation should skip the rest of processing too.

We can get rid of test_thread_flag because there's no longer any
opportunity for seccomp to mess with ptrace state before invoking
ptrace.

Suggested-by: Andy Lutomirski <luto@kernel.org>
Signed-off-by: Kees Cook <keescook@chromium.org>
Cc: x86@kernel.org
Cc: Andy Lutomirski <luto@kernel.org>
  • Loading branch information
kees committed Jun 14, 2016
1 parent ce6526e commit 93e35ef
Showing 1 changed file with 12 additions and 10 deletions.
22 changes: 12 additions & 10 deletions arch/x86/entry/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,18 +73,27 @@ static long syscall_trace_enter(struct pt_regs *regs)

struct thread_info *ti = pt_regs_to_thread_info(regs);
unsigned long ret = 0;
bool emulated = false;
u32 work;

if (IS_ENABLED(CONFIG_DEBUG_ENTRY))
BUG_ON(regs != task_pt_regs(current));

work = ACCESS_ONCE(ti->flags) & _TIF_WORK_SYSCALL_ENTRY;

if (unlikely(work & _TIF_SYSCALL_EMU))
emulated = true;

if ((emulated || (work & _TIF_SYSCALL_TRACE)) &&
tracehook_report_syscall_entry(regs))
return -1L;

if (emulated)
return -1L;

#ifdef CONFIG_SECCOMP
/*
* Do seccomp first -- it should minimize exposure of other
* code, and keeping seccomp fast is probably more valuable
* than the rest of this.
* Do seccomp after ptrace, to catch any tracer changes.
*/
if (work & _TIF_SECCOMP) {
struct seccomp_data sd;
Expand Down Expand Up @@ -117,13 +126,6 @@ static long syscall_trace_enter(struct pt_regs *regs)
}
#endif

if (unlikely(work & _TIF_SYSCALL_EMU))
ret = -1L;

if ((ret || test_thread_flag(TIF_SYSCALL_TRACE)) &&
tracehook_report_syscall_entry(regs))
ret = -1L;

if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
trace_sys_enter(regs, regs->orig_ax);

Expand Down

0 comments on commit 93e35ef

Please sign in to comment.