• Dave Hansen's avatar
    x86/fpu: Simplify PTRACE_GETREGS code · 3a335112
    Dave Hansen authored
    ptrace() has interfaces that let a ptracer inspect a ptracee's register state.
    This includes XSAVE state.  The ptrace() ABI includes a hardware-format XSAVE
    buffer for both the SETREGS and GETREGS interfaces.
    
    In the old days, the kernel buffer and the ptrace() ABI buffer were the
    same boring non-compacted format.  But, since the advent of supervisor
    states and the compacted format, the kernel buffer has diverged from the
    format presented in the ABI.
    
    This leads to two paths in the kernel:
    1. Effectively a verbatim copy_to_user() which just copies the kernel buffer
       out to userspace.  This is used when the kernel buffer is kept in the
       non-compacted form which means that it shares a format with the ptrace
       ABI.
    2. A one-state-at-a-time path: copy_xstate_to_kernel().  This is theoretically
       slower since it does a bunch of piecemeal copies.
    
    Remove the verbatim copy case.  Speed probably does not matter in this path,
    and the vast majority of new hardware will use the one-state-at-a-time path
    anyway.  This ensures greater testing for the "slow" path.
    
    This also makes enabling PKRU in this interface easier since a single path
    can be patched instead of two.
    Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Reviewed-by: default avatarAndy Lutomirski <luto@kernel.org>
    Reviewed-by: default avatarBorislav Petkov <bp@suse.de>
    Link: https://lkml.kernel.org/r/20210623121452.408457100@linutronix.de
    3a335112
xstate.c 39 KB