• Michael Ellerman's avatar
    powerpc: Use orig_gpr3 in syscall_get_arguments() · 1cb9839b
    Michael Ellerman authored
    Currently syscall_get_arguments() is used by syscall tracepoints, and
    collect_syscall() which is used in some debugging as well as
    /proc/pid/syscall.
    
    The current implementation just copies regs->gpr[3 .. 5] out, which is
    fine for all the current use cases.
    
    When we enable seccomp filter, that will also start using
    syscall_get_arguments(). However for seccomp filter we want to use r3
    as the return value of the syscall, and orig_gpr3 as the first
    parameter. This will allow seccomp to modify the return value in r3.
    
    To support this we need to modify syscall_get_arguments() to return
    orig_gpr3 instead of r3. This is safe for all uses because orig_gpr3
    always contains the r3 value that was passed to the syscall. We store it
    in the syscall entry path and never modify it.
    
    Update syscall_set_arguments() while we're here, even though it's never
    used.
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Reviewed-by: default avatarKees Cook <keescook@chromium.org>
    1cb9839b
syscall.h 2.57 KB