]> git.karo-electronics.de Git - karo-tx-linux.git/commit
x86-32, vdso: On system call restart after SYSENTER, use int $0x80
authorH. Peter Anvin <hpa@linux.intel.com>
Mon, 22 Aug 2011 20:27:06 +0000 (13:27 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 29 Aug 2011 21:33:01 +0000 (14:33 -0700)
commit068b8e1556805d48fcfee26c61ee65a52abc4f77
tree75d9fba37a3be8ed22483dec8db8587a11449f02
parent1d57518f2aa045a64886781a66b42e072a9e7bf6
x86-32, vdso: On system call restart after SYSENTER, use int $0x80

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 <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
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
arch/x86/vdso/vdso32/sysenter.S