lkml.org 
[lkml]   [2023]   [Feb]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v7 02/41] x86/shstk: Add Kconfig option for shadow stack
    Date
    From: Yu-cheng Yu <yu-cheng.yu@intel.com>

    Shadow stack provides protection for applications against function return
    address corruption. It is active when the processor supports it, the
    kernel has CONFIG_X86_SHADOW_STACK enabled, and the application is built
    for the feature. This is only implemented for the 64-bit kernel. When it
    is enabled, legacy non-shadow stack applications continue to work, but
    without protection.

    Since there is another feature that utilizes CET (Kernel IBT) that will
    share implementation with shadow stacks, create CONFIG_CET to signify
    that at least one CET feature is configured.

    Tested-by: Pengfei Xu <pengfei.xu@intel.com>
    Tested-by: John Allen <john.allen@amd.com>
    Tested-by: Kees Cook <keescook@chromium.org>
    Acked-by: Mike Rapoport (IBM) <rppt@kernel.org>
    Reviewed-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Yu-cheng Yu <yu-cheng.yu@intel.com>
    Co-developed-by: Rick Edgecombe <rick.p.edgecombe@intel.com>
    Signed-off-by: Rick Edgecombe <rick.p.edgecombe@intel.com>
    Cc: Kees Cook <keescook@chromium.org>

    ---
    v5:
    - Remove capitalization of shadow stack (Boris)

    v3:
    - Add X86_CET (Kees)
    - Add back WRUSS dependency (Kees)
    - Fix verbiage (Dave)
    - Change from promt to bool (Kirill)
    - Add more to commit log

    v2:
    - Remove already wrong kernel size increase info (tlgx)
    - Change prompt to remove "Intel" (tglx)
    - Update line about what CPUs are supported (Dave)

    Yu-cheng v25:
    - Remove X86_CET and use X86_SHADOW_STACK directly.
    ---
    arch/x86/Kconfig | 24 ++++++++++++++++++++++++
    arch/x86/Kconfig.assembler | 5 +++++
    2 files changed, 29 insertions(+)

    diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
    index a825bf031f49..f03791b73f9f 100644
    --- a/arch/x86/Kconfig
    +++ b/arch/x86/Kconfig
    @@ -1851,6 +1851,11 @@ config CC_HAS_IBT
    (CC_IS_CLANG && CLANG_VERSION >= 140000)) && \
    $(as-instr,endbr64)

    +config X86_CET
    + def_bool n
    + help
    + CET features configured (Shadow stack or IBT)
    +
    config X86_KERNEL_IBT
    prompt "Indirect Branch Tracking"
    def_bool y
    @@ -1858,6 +1863,7 @@ config X86_KERNEL_IBT
    # https://github.com/llvm/llvm-project/commit/9d7001eba9c4cb311e03cd8cdc231f9e579f2d0f
    depends on !LD_IS_LLD || LLD_VERSION >= 140000
    select OBJTOOL
    + select X86_CET
    help
    Build the kernel with support for Indirect Branch Tracking, a
    hardware support course-grain forward-edge Control Flow Integrity
    @@ -1952,6 +1958,24 @@ config X86_SGX

    If unsure, say N.

    +config X86_USER_SHADOW_STACK
    + bool "X86 userspace shadow stack"
    + depends on AS_WRUSS
    + depends on X86_64
    + select ARCH_USES_HIGH_VMA_FLAGS
    + select X86_CET
    + help
    + Shadow stack protection is a hardware feature that detects function
    + return address corruption. This helps mitigate ROP attacks.
    + Applications must be enabled to use it, and old userspace does not
    + get protection "for free".
    +
    + CPUs supporting shadow stacks were first released in 2020.
    +
    + See Documentation/x86/shstk.rst for more information.
    +
    + If unsure, say N.
    +
    config EFI
    bool "EFI runtime service support"
    depends on ACPI
    diff --git a/arch/x86/Kconfig.assembler b/arch/x86/Kconfig.assembler
    index b88f784cb02e..8ad41da301e5 100644
    --- a/arch/x86/Kconfig.assembler
    +++ b/arch/x86/Kconfig.assembler
    @@ -24,3 +24,8 @@ config AS_GFNI
    def_bool $(as-instr,vgf2p8mulb %xmm0$(comma)%xmm1$(comma)%xmm2)
    help
    Supported by binutils >= 2.30 and LLVM integrated assembler
    +
    +config AS_WRUSS
    + def_bool $(as-instr,wrussq %rax$(comma)(%rbx))
    + help
    + Supported by binutils >= 2.31 and LLVM integrated assembler
    --
    2.17.1
    \
     
     \ /
      Last update: 2023-03-27 00:37    [W:4.126 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site