• Will Deacon's avatar
    arm64: entry: always restore x0 from the stack on syscall return · 412fcb6c
    Will Deacon authored
    We have a micro-optimisation on the fast syscall return path where we
    take care to keep x0 live with the return value from the syscall so that
    we can avoid restoring it from the stack. The benefit of doing this is
    fairly suspect, since we will be restoring x1 from the stack anyway
    (which lives adjacent in the pt_regs structure) and the only additional
    cost is saving x0 back to pt_regs after the syscall handler, which could
    be seen as a poor man's prefetch.
    
    More importantly, this causes issues with the context tracking code.
    
    The ct_user_enter macro ends up branching into C code, which is free to
    use x0 as a scratch register and consequently leads to us returning junk
    back to userspace as the syscall return value. Rather than special case
    the context-tracking code, this patch removes the questionable
    optimisation entirely.
    
    Cc: <stable@vger.kernel.org>
    Cc: Larry Bassel <larry.bassel@linaro.org>
    Cc: Kevin Hilman <khilman@linaro.org>
    Reviewed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    Reported-by: default avatarHanjun Guo <hanjun.guo@linaro.org>
    Tested-by: default avatarHanjun Guo <hanjun.guo@linaro.org>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    412fcb6c
entry.S 16.4 KB