• Linus Torvalds's avatar
    Merge tag 'x86-fsgsbase-2020-08-04' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 4da9f330
    Linus Torvalds authored
    Pull x86 fsgsbase from Thomas Gleixner:
     "Support for FSGSBASE. Almost 5 years after the first RFC to support
      it, this has been brought into a shape which is maintainable and
      actually works.
    
      This final version was done by Sasha Levin who took it up after Intel
      dropped the ball. Sasha discovered that the SGX (sic!) offerings out
      there ship rogue kernel modules enabling FSGSBASE behind the kernels
      back which opens an instantanious unpriviledged root hole.
    
      The FSGSBASE instructions provide a considerable speedup of the
      context switch path and enable user space to write GSBASE without
      kernel interaction. This enablement requires careful handling of the
      exception entries which go through the paranoid entry path as they
      can no longer rely on the assumption that user GSBASE is positive (as
      enforced via prctl() on non FSGSBASE enabled systemn).
    
      All other entries (syscalls, interrupts and exceptions) can still just
      utilize SWAPGS unconditionally when the entry comes from user space.
      Converting these entries to use FSGSBASE has no benefit as SWAPGS is
      only marginally slower than WRGSBASE and locating and retrieving the
      kernel GSBASE value is not a free operation either. The real benefit
      of RD/WRGSBASE is the avoidance of the MSR reads and writes.
    
      The changes come with appropriate selftests and have held up in field
      testing against the (sanitized) Graphene-SGX driver"
    
    * tag 'x86-fsgsbase-2020-08-04' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (21 commits)
      x86/fsgsbase: Fix Xen PV support
      x86/ptrace: Fix 32-bit PTRACE_SETREGS vs fsbase and gsbase
      selftests/x86/fsgsbase: Add a missing memory constraint
      selftests/x86/fsgsbase: Fix a comment in the ptrace_write_gsbase test
      selftests/x86: Add a syscall_arg_fault_64 test for negative GSBASE
      selftests/x86/fsgsbase: Test ptracer-induced GS base write with FSGSBASE
      selftests/x86/fsgsbase: Test GS selector on ptracer-induced GS base write
      Documentation/x86/64: Add documentation for GS/FS addressing mode
      x86/elf: Enumerate kernel FSGSBASE capability in AT_HWCAP2
      x86/cpu: Enable FSGSBASE on 64bit by default and add a chicken bit
      x86/entry/64: Handle FSGSBASE enabled paranoid entry/exit
      x86/entry/64: Introduce the FIND_PERCPU_BASE macro
      x86/entry/64: Switch CR3 before SWAPGS in paranoid entry
      x86/speculation/swapgs: Check FSGSBASE in enabling SWAPGS mitigation
      x86/process/64: Use FSGSBASE instructions on thread copy and ptrace
      x86/process/64: Use FSBSBASE in switch_to() if available
      x86/process/64: Make save_fsgs_for_kvm() ready for FSGSBASE
      x86/fsgsbase/64: Enable FSGSBASE instructions in helper functions
      x86/fsgsbase/64: Add intrinsics for FSGSBASE instructions
      x86/cpu: Add 'unsafe_fsgsbase' to enable CR4.FSGSBASE
      ...
    4da9f330
process.c 24 KB