[lkml]   [2011]   [Aug]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[15/19] x86-32, vdso: On system call restart after SYSENTER, use int $0x80
    2.6.32-longterm review patch.  If anyone has any objections, please let us know.


    From: "H. Peter Anvin" <>

    commit 7ca0758cdb7c241cb4e0490a8d95f0eb5b861daf upstream.

    When we enter a 32-bit system call via SYSENTER or SYSCALL, we shuffle
    the arguments to match the int $0x80 calling convention. This was
    probably a design mistake, but it's what it is now. This causes
    errors if the system call as to be restarted.

    For SYSENTER, we have to invoke the instruction from the vdso as the
    return address is hardcoded. Accordingly, we can simply replace the
    jump in the vdso with an int $0x80 instruction and use the slower
    entry point for a post-restart.

    Suggested-by: Linus Torvalds <>
    Signed-off-by: H. Peter Anvin <>
    Signed-off-by: Greg Kroah-Hartman <>

    arch/x86/vdso/vdso32/sysenter.S | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/arch/x86/vdso/vdso32/sysenter.S
    +++ b/arch/x86/vdso/vdso32/sysenter.S
    @@ -43,7 +43,7 @@ __kernel_vsyscall:
    .space 7,0x90

    /* 14: System call restart point is here! (SYSENTER_RETURN-2) */
    - jmp .Lenter_kernel
    + int $0x80
    /* 16: System call normal return point is here! */
    VDSO32_SYSENTER_RETURN: /* Symbol used by sysenter.c via vdso32-syms.h */
    pop %ebp

     \ /
      Last update: 2011-08-27 16:59    [W:0.018 / U:7.580 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site