• Linus Torvalds's avatar
    Merge tag 'x86-fpu-2021-07-07' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 1423e266
    Linus Torvalds authored
    Pull x86 fpu updates from Thomas Gleixner:
     "Fixes and improvements for FPU handling on x86:
    
       - Prevent sigaltstack out of bounds writes.
    
         The kernel unconditionally writes the FPU state to the alternate
         stack without checking whether the stack is large enough to
         accomodate it.
    
         Check the alternate stack size before doing so and in case it's too
         small force a SIGSEGV instead of silently corrupting user space
         data.
    
       - MINSIGSTKZ and SIGSTKSZ are constants in signal.h and have never
         been updated despite the fact that the FPU state which is stored on
         the signal stack has grown over time which causes trouble in the
         field when AVX512 is available on a CPU. The kernel does not expose
         the minimum requirements for the alternate stack size depending on
         the available and enabled CPU features.
    
         ARM already added an aux vector AT_MINSIGSTKSZ for the same reason.
         Add it to x86 as well.
    
       - A major cleanup of the x86 FPU code. The recent discoveries of
         XSTATE related issues unearthed quite some inconsistencies,
         duplicated code and other issues.
    
         The fine granular overhaul addresses this, makes the code more
         robust and maintainable, which allows to integrate upcoming XSTATE
         related features in sane ways"
    
    * tag 'x86-fpu-2021-07-07' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (74 commits)
      x86/fpu/xstate: Clear xstate header in copy_xstate_to_uabi_buf() again
      x86/fpu/signal: Let xrstor handle the features to init
      x86/fpu/signal: Handle #PF in the direct restore path
      x86/fpu: Return proper error codes from user access functions
      x86/fpu/signal: Split out the direct restore code
      x86/fpu/signal: Sanitize copy_user_to_fpregs_zeroing()
      x86/fpu/signal: Sanitize the xstate check on sigframe
      x86/fpu/signal: Remove the legacy alignment check
      x86/fpu/signal: Move initial checks into fpu__restore_sig()
      x86/fpu: Mark init_fpstate __ro_after_init
      x86/pkru: Remove xstate fiddling from write_pkru()
      x86/fpu: Don't store PKRU in xstate in fpu_reset_fpstate()
      x86/fpu: Remove PKRU handling from switch_fpu_finish()
      x86/fpu: Mask PKRU from kernel XRSTOR[S] operations
      x86/fpu: Hook up PKRU into ptrace()
      x86/fpu: Add PKRU storage outside of task XSAVE buffer
      x86/fpu: Dont restore PKRU in fpregs_restore_userspace()
      x86/fpu: Rename xfeatures_mask_user() to xfeatures_mask_uabi()
      x86/fpu: Move FXSAVE_LEAK quirk info __copy_kernel_to_fpregs()
      x86/fpu: Rename __fpregs_load_activate() to fpregs_restore_userregs()
      ...
    1423e266
traps.c 31.9 KB