linux/arch/x86/vdso/vdso32
H. Peter Anvin 7ca0758cdb x86-32, vdso: On system call restart after SYSENTER, use int $0x80
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 <torvalds@linux-foundation.org>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Link: http://lkml.kernel.org/r/CA%2B55aFztZ=r5wa0x26KJQxvZOaQq8s2v3u50wCyJcA-Sc4g8gQ@mail.gmail.com
Cc: <stable@kernel.org>
2011-08-23 16:20:10 -07:00
..
.gitignore x86: gitignore arch/x86/vdso files 2008-01-30 13:32:32 +01:00
int80.S x86 vDSO: canonicalize sysenter .eh_frame 2008-01-30 13:30:44 +01:00
note.S x86 vDSO: i386 vdso32 2008-01-30 13:30:42 +01:00
sigreturn.S x86: use generic register names in struct sigcontext 2008-01-30 13:30:56 +01:00
syscall.S x86 vDSO: canonicalize sysenter .eh_frame 2008-01-30 13:30:44 +01:00
sysenter.S x86-32, vdso: On system call restart after SYSENTER, use int $0x80 2011-08-23 16:20:10 -07:00
vdso32.lds.S x86 vDSO: vdso32 build 2008-01-30 13:30:42 +01:00