aboutsummaryrefslogtreecommitdiff
path: root/lib/debugobjects.c
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@linux.intel.com>2010-09-14 12:42:41 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2010-09-20 13:03:21 -0700
commit18023624ec38bc31b5d9f16ea4077eb8b85c42bd (patch)
tree48ab763e6f032b42b44cd900b405e58c22fd3027 /lib/debugobjects.c
parentc0a328941a72e32e194c3dcc9802b5970f55d9e9 (diff)
x86-64, compat: Test %rax for the syscall number, not %eax
commit 36d001c70d8a0144ac1d038f6876c484849a74de upstream. 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 d4d67150165df8bf1cc05e532f6efca96f907cab. 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: Roland McGrath <roland@redhat.com> Cc: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'lib/debugobjects.c')
0 files changed, 0 insertions, 0 deletions