We either need to restore them before popping and thus changing ESP,
or we need to adjust the offsets.  The former is simpler.

Fixes: 5f310f739b4c x86/entry/32: ("Re-implement SYSENTER using the new C path")
Signed-off-by: Andy Lutomirski <[email protected]>
---
 arch/x86/entry/entry_32.S | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S
index ba0dad937be9..e3ede42d30e2 100644
--- a/arch/x86/entry/entry_32.S
+++ b/arch/x86/entry/entry_32.S
@@ -315,6 +315,8 @@ 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 */
        popl    %eax                    /* skip pt_regs->cx */
        popl    %eax                    /* skip pt_regs->dx */
@@ -322,8 +324,6 @@ sysenter_past_esp:
        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.
-- 
2.4.3

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to