Skip to content

Commit

Permalink
x86_32, entry: Do syscall exit work on badsys (CVE-2014-4508)
Browse files Browse the repository at this point in the history
commit 554086d upstream.

The bad syscall nr paths are their own incomprehensible route
through the entry control flow.  Rearrange them to work just like
syscalls that return -ENOSYS.

This fixes an OOPS in the audit code when fast-path auditing is
enabled and sysenter gets a bad syscall nr (CVE-2014-4508).

This has probably been broken since Linux 2.6.27:
af0575b i386 syscall audit fast-path

Cc: Roland McGrath <roland@redhat.com>
Reported-by: Toralf Förster <toralf.foerster@gmx.de>
Signed-off-by: Andy Lutomirski <luto@amacapital.net>
Link: http://lkml.kernel.org/r/e09c499eade6fc321266dd6b54da7beb28d6991c.1403558229.git.luto@amacapital.net
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Andy Lutomirski authored and Greg Kroah-Hartman committed Jul 1, 2014
1 parent 3b0d089 commit d300733
Showing 1 changed file with 8 additions and 2 deletions.
10 changes: 8 additions & 2 deletions arch/x86/kernel/entry_32.S
Original file line number Diff line number Diff line change
@@ -426,9 +426,10 @@ sysenter_past_esp:
jnz sysenter_audit
sysenter_do_call:
cmpl $(NR_syscalls), %eax
jae syscall_badsys
jae sysenter_badsys
call *sys_call_table(,%eax,4)
movl %eax,PT_EAX(%esp)
sysenter_after_call:
LOCKDEP_SYS_EXIT
DISABLE_INTERRUPTS(CLBR_ANY)
TRACE_IRQS_OFF
@@ -678,7 +679,12 @@ END(syscall_fault)

syscall_badsys:
movl $-ENOSYS,PT_EAX(%esp)
jmp resume_userspace
jmp syscall_exit
END(syscall_badsys)

sysenter_badsys:
movl $-ENOSYS,PT_EAX(%esp)
jmp sysenter_after_call
END(syscall_badsys)
CFI_ENDPROC
/*

0 comments on commit d300733

Please sign in to comment.