linux/arch/x86/ia32
H. Peter Anvin 36d001c70d x86-64, compat: Test %rax for the syscall number, not %eax
On 64 bits, we always, by necessity, jump through the system call
table via %rax.  For 32-bit system calls, in theory the system call
number is stored in %eax, and the code was testing %eax for a valid
system call number.  At one point we loaded the stored value back from
the stack to enforce zero-extension, but that was removed in checkin
d4d6715016.  An actual 32-bit process
will not be able to introduce a non-zero-extended number, but it can
happen via ptrace.

Instead of re-introducing the zero-extension, test what we are
actually going to use, i.e. %rax.  This only adds a handful of REX
prefixes to the code.

Reported-by: Ben Hawkes <hawkes@sota.gen.nz>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Cc: <stable@kernel.org>
Cc: Roland McGrath <roland@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
2010-09-14 16:08:46 -07:00
..
audit.c x86: coding style fixes in arch/x86/ia32/audit.c 2008-01-30 13:32:54 +01:00
ia32_aout.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
ia32_signal.c x86: ia32_signal: introduce {get|set}_user_seg() 2009-02-22 17:54:47 +01:00
ia32entry.S x86-64, compat: Test %rax for the syscall number, not %eax 2010-09-14 16:08:46 -07:00
ipc32.c x86: introducing asm/sys_ia32.h 2008-12-29 13:18:40 +01:00
Makefile x86: compat_binfmt_elf 2008-01-30 13:31:55 +01:00
sys_ia32.c Mark arguments to certain syscalls as being const 2010-08-13 16:53:13 -07:00