Message ID | 20180607143705.3531-3-yu-cheng.yu@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Jun 7, 2018 at 7:40 AM Yu-cheng Yu <yu-cheng.yu@intel.com> wrote: > > Introduce Kconfig option X86_INTEL_SHADOW_STACK_USER. > > An application has shadow stack protection when all the following are > true: > > (1) The kernel has X86_INTEL_SHADOW_STACK_USER enabled, > (2) The running processor supports the shadow stack, > (3) The application is built with shadow stack enabled tools & libs > and, and at runtime, all dependent shared libs can support shadow > stack. > > If this kernel config option is enabled, but (2) or (3) above is not > true, the application runs without the shadow stack protection. > Existing legacy applications will continue to work without the shadow > stack protection. > > The user-mode shadow stack protection is only implemented for the > 64-bit kernel. Thirty-two bit applications are supported under the > compatibility mode. > The 64-bit only part seems entirely reasonable. So please make the code 64-bit only :)
On Thu, 2018-06-07 at 08:47 -0700, Andy Lutomirski wrote: > On Thu, Jun 7, 2018 at 7:40 AM Yu-cheng Yu <yu-cheng.yu@intel.com> wrote: > > > > Introduce Kconfig option X86_INTEL_SHADOW_STACK_USER. > > > > An application has shadow stack protection when all the following are > > true: > > > > (1) The kernel has X86_INTEL_SHADOW_STACK_USER enabled, > > (2) The running processor supports the shadow stack, > > (3) The application is built with shadow stack enabled tools & libs > > and, and at runtime, all dependent shared libs can support shadow > > stack. > > > > If this kernel config option is enabled, but (2) or (3) above is not > > true, the application runs without the shadow stack protection. > > Existing legacy applications will continue to work without the shadow > > stack protection. > > > > The user-mode shadow stack protection is only implemented for the > > 64-bit kernel. Thirty-two bit applications are supported under the > > compatibility mode. > > > > The 64-bit only part seems entirely reasonable. So please make the > code 64-bit only :) Yes, I will remove changes in "arch/x86/entry/entry32.S". We still want to support x32/ia32 in the 64-bit kernel, right?
On Thu, Jun 7, 2018 at 9:02 AM Yu-cheng Yu <yu-cheng.yu@intel.com> wrote: > > On Thu, 2018-06-07 at 08:47 -0700, Andy Lutomirski wrote: > > On Thu, Jun 7, 2018 at 7:40 AM Yu-cheng Yu <yu-cheng.yu@intel.com> wrote: > > > > > > Introduce Kconfig option X86_INTEL_SHADOW_STACK_USER. > > > > > > An application has shadow stack protection when all the following are > > > true: > > > > > > (1) The kernel has X86_INTEL_SHADOW_STACK_USER enabled, > > > (2) The running processor supports the shadow stack, > > > (3) The application is built with shadow stack enabled tools & libs > > > and, and at runtime, all dependent shared libs can support shadow > > > stack. > > > > > > If this kernel config option is enabled, but (2) or (3) above is not > > > true, the application runs without the shadow stack protection. > > > Existing legacy applications will continue to work without the shadow > > > stack protection. > > > > > > The user-mode shadow stack protection is only implemented for the > > > 64-bit kernel. Thirty-two bit applications are supported under the > > > compatibility mode. > > > > > > > The 64-bit only part seems entirely reasonable. So please make the > > code 64-bit only :) > > Yes, I will remove changes in "arch/x86/entry/entry32.S". > We still want to support x32/ia32 in the 64-bit kernel, right? > Yes, I think. But that's not in entry_32.S >
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index c07f492b871a..dd580d4910fc 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -1925,6 +1925,30 @@ config X86_INTEL_MEMORY_PROTECTION_KEYS If unsure, say y. +config X86_INTEL_CET + def_bool n + +config ARCH_HAS_SHSTK + def_bool n + +config X86_INTEL_SHADOW_STACK_USER + prompt "Intel Shadow Stack for user-mode" + def_bool n + depends on CPU_SUP_INTEL && X86_64 + select X86_INTEL_CET + select ARCH_HAS_SHSTK + ---help--- + Shadow stack provides hardware protection against program stack + corruption. Only when all the following are true will an application + have the shadow stack protection: the kernel supports it (i.e. this + feature is enabled), the application is compiled and linked with + shadow stack enabled, and the processor supports this feature. + When the kernel has this configuration enabled, existing non shadow + stack applications will continue to work, but without shadow stack + protection. + + If unsure, say y. + config EFI bool "EFI runtime service support" depends on ACPI
Introduce Kconfig option X86_INTEL_SHADOW_STACK_USER. An application has shadow stack protection when all the following are true: (1) The kernel has X86_INTEL_SHADOW_STACK_USER enabled, (2) The running processor supports the shadow stack, (3) The application is built with shadow stack enabled tools & libs and, and at runtime, all dependent shared libs can support shadow stack. If this kernel config option is enabled, but (2) or (3) above is not true, the application runs without the shadow stack protection. Existing legacy applications will continue to work without the shadow stack protection. The user-mode shadow stack protection is only implemented for the 64-bit kernel. Thirty-two bit applications are supported under the compatibility mode. Signed-off-by: Yu-cheng Yu <yu-cheng.yu@intel.com> --- arch/x86/Kconfig | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+)