diff mbox

[3.8,106/116] x86_32, entry: Do syscall exit work on badsys (CVE-2014-4508)

Message ID 1406067727-19683-107-git-send-email-kamal@canonical.com
State New
Headers show

Commit Message

Kamal Mostafa July 22, 2014, 10:21 p.m. UTC
3.8.13.27 -stable review patch.  If anyone has any objections, please let me know.

------------------

From: Andy Lutomirski <luto@amacapital.net>

commit 554086d85e71f30abe46fc014fea31929a7c6a8a 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:
af0575bba0 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: Kamal Mostafa <kamal@canonical.com>
---
 arch/x86/kernel/entry_32.S | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

Comments

Andy Lutomirski July 22, 2014, 10:27 p.m. UTC | #1
On Tue, Jul 22, 2014 at 3:21 PM, Kamal Mostafa <kamal@canonical.com> wrote:
> 3.8.13.27 -stable review patch.  If anyone has any objections, please let me know.
>
> ------------------
>
> From: Andy Lutomirski <luto@amacapital.net>
>
> commit 554086d85e71f30abe46fc014fea31929a7c6a8a 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:
> af0575bba0 i386 syscall audit fast-path

Don't apply this without:

https://git.kernel.org/cgit/linux/kernel/git/tip/tip.git/commit/?h=x86/urgent&id=8142b215501f8b291a108a202b3a053a265b03dd

Sorry!

--Andy
Greg KH July 22, 2014, 11:59 p.m. UTC | #2
On Tue, Jul 22, 2014 at 03:27:59PM -0700, Andy Lutomirski wrote:
> On Tue, Jul 22, 2014 at 3:21 PM, Kamal Mostafa <kamal@canonical.com> wrote:
> > 3.8.13.27 -stable review patch.  If anyone has any objections, please let me know.
> >
> > ------------------
> >
> > From: Andy Lutomirski <luto@amacapital.net>
> >
> > commit 554086d85e71f30abe46fc014fea31929a7c6a8a 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:
> > af0575bba0 i386 syscall audit fast-path
> 
> Don't apply this without:
> 
> https://git.kernel.org/cgit/linux/kernel/git/tip/tip.git/commit/?h=x86/urgent&id=8142b215501f8b291a108a202b3a053a265b03dd
> 
> Sorry!

As that isn't in Linus's tree yet, don't apply that one either...

thanks,

greg k-h
Kamal Mostafa July 23, 2014, 9:10 p.m. UTC | #3
On Tue, 2014-07-22 at 15:27 -0700, Andy Lutomirski wrote:
> On Tue, Jul 22, 2014 at 3:21 PM, Kamal Mostafa <kamal@canonical.com> wrote:
> > 3.8.13.27 -stable review patch.  If anyone has any objections, please let me know.
> >
> > ------------------
> >
> > From: Andy Lutomirski <luto@amacapital.net>
> >
> > commit 554086d85e71f30abe46fc014fea31929a7c6a8a upstream.
> >
> > The bad syscall nr paths are their own incomprehensible route
> > [...]
> 
> Don't apply this without:
> 
> https://git.kernel.org/cgit/linux/kernel/git/tip/tip.git/commit/?h=x86/urgent&id=8142b215501f8b291a108a202b3a053a265b03dd
> 
> Sorry!

No worries -- I've dropped this from the 3.8-stable queue, pending . . .

> As that isn't in Linus's tree yet, don't apply that one either...
> thanks,
> greg k-h

. . . that.  Thanks Andy and Greg,

 -Kamal
diff mbox

Patch

diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S
index 60d03c2..b32b466 100644
--- a/arch/x86/kernel/entry_32.S
+++ b/arch/x86/kernel/entry_32.S
@@ -434,9 +434,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
@@ -686,7 +687,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
 /*