]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
x86/entry/32: Fix FS and GS restore in opportunistic SYSEXIT
authorAndy Lutomirski <luto@kernel.org>
Fri, 16 Oct 2015 22:42:55 +0000 (15:42 -0700)
committerIngo Molnar <mingo@kernel.org>
Sun, 18 Oct 2015 10:11:16 +0000 (12:11 +0200)
We either need to restore them before popping and thus changing
ESP, or we need to adjust the offsets.  The former is simpler.

Reported-and-tested-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Andy Lutomirski <luto@kernel.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Fixes: 5f310f739b4c x86/entry/32: ("Re-implement SYSENTER using the new C path")
Link: http://lkml.kernel.org/r/461e5c7d8fa3821529893a4893ac9c4bc37f9e17.1445035014.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/entry/entry_32.S

index 4f97f49261d365a3bcce383adc749e8a0eec4c34..3eb572ed3d7ad438d8dfd1627b5b4121314c9f67 100644 (file)
@@ -315,14 +315,14 @@ sysenter_past_esp:
        TRACE_IRQS_ON                   /* User mode traces as IRQs on. */
        movl    PT_EIP(%esp), %edx      /* pt_regs->ip */
        movl    PT_OLDESP(%esp), %ecx   /* pt_regs->sp */
+1:     mov     PT_FS(%esp), %fs
+       PTGS_TO_GS
        popl    %ebx                    /* pt_regs->bx */
        addl    $2*4, %esp              /* skip pt_regs->cx and pt_regs->dx */
        popl    %esi                    /* pt_regs->si */
        popl    %edi                    /* pt_regs->di */
        popl    %ebp                    /* pt_regs->bp */
        popl    %eax                    /* pt_regs->ax */
-1:     mov     PT_FS(%esp), %fs
-       PTGS_TO_GS
 
        /*
         * Return back to the vDSO, which will pop ecx and edx.