• H. Peter Anvin's avatar
    x86-64, compat: Test %rax for the syscall number, not %eax · 36d001c7
    H. Peter Anvin authored
    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
    d4d67150.  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: default avatarBen Hawkes <hawkes@sota.gen.nz>
    Signed-off-by: default avatarH. Peter Anvin <hpa@linux.intel.com>
    Cc: <stable@kernel.org>
    Cc: Roland McGrath <roland@redhat.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    36d001c7
ia32entry.S 21.9 KB