From: Yu-cheng Yu <yu-cheng.yu@intel.com>
To: x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>,
linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org,
linux-mm@kvack.org, linux-arch@vger.kernel.org,
linux-api@vger.kernel.org, Arnd Bergmann <arnd@arndb.de>,
Andy Lutomirski <luto@kernel.org>,
Balbir Singh <bsingharora@gmail.com>,
Borislav Petkov <bp@alien8.de>,
Cyrill Gorcunov <gorcunov@gmail.com>,
Dave Hansen <dave.hansen@linux.intel.com>,
Eugene Syromiatnikov <esyr@redhat.com>,
Florian Weimer <fweimer@redhat.com>,
"H.J. Lu" <hjl.tools@gmail.com>, Jann Horn <jannh@google.com>,
Jonathan Corbet <corbet@lwn.net>,
Kees Cook <keescook@chromium.org>,
Mike Kravetz <mike.kravetz@oracle.com>,
Nadav Amit <nadav.amit@gmail.com>,
Oleg Nesterov <oleg@redhat.com>, Pavel Machek <pavel@ucw.cz>,
Peter Zijlstra <peterz@infradead.org>,
Randy Dunlap <rdunlap@infradead.org>,
"Ravi V. Shankar" <ravi.v.shankar@intel.com>,
Vedvyas Shanbhogue <vedvyas.shanbhogue@intel.com>,
Dave Martin <Dave.Martin@arm.com>,
Weijiang Yang <weijiang.yang@intel.com>,
Pengfei Xu <pengfei.xu@intel.com>,
Haitao Huang <haitao.huang@intel.com>
Cc: Yu-cheng Yu <yu-cheng.yu@intel.com>
Subject: [PATCH v27 00/31] Control-flow Enforcement: Shadow Stack
Date: Fri, 21 May 2021 15:11:40 -0700 [thread overview]
Message-ID: <20210521221211.29077-1-yu-cheng.yu@intel.com> (raw)
Control-flow Enforcement (CET) is a new Intel processor feature that blocks
return/jump-oriented programming attacks. Details are in "Intel 64 and
IA-32 Architectures Software Developer's Manual" [1].
CET can protect applications and the kernel. This series enables only
application-level protection, and has three parts:
- Shadow stack [2],
- Indirect branch tracking [3], and
- Selftests [4].
I have run tests on these patches for quite some time, and they have been
very stable. Linux distributions with CET are available now, and Intel
processors with CET are already on the market. It would be nice if CET
support can be accepted into the kernel. I will be working to address any
issues should they come up.
Changes in v27:
- Eliminate signal context extension structure. Simplify signal handling.
- Add a new patch to move VM_UFFD_MINOR_BIT to 38.
- Smaller changes are in each patch's log.
- Rebase to Linus tree v5.13-rc2.
[1] Intel 64 and IA-32 Architectures Software Developer's Manual:
https://software.intel.com/en-us/download/intel-64-and-ia-32-
architectures-sdm-combined-volumes-1-2a-2b-2c-2d-3a-3b-3c-3d-and-4
[2] Shadow Stack patches v26:
https://lore.kernel.org/r/20210427204315.24153-1-yu-cheng.yu@intel.com/
[3] Indirect Branch Tracking patches v26
https://lore.kernel.org/r/20210427204720.25007-1-yu-cheng.yu@intel.com/
[4] I am holding off the selftests changes and working to get Reviewed-by's.
The earlier version of the selftests patches:
https://lkml.kernel.org/r/20200521211720.20236-1-yu-cheng.yu@intel.com/
[5] The kernel ptrace patch is tested with an Intel-internal updated GDB.
I am holding off the kernel ptrace patch to re-test it with my earlier
patch for fixing regset holes.
Yu-cheng Yu (31):
Documentation/x86: Add CET description
x86/cet/shstk: Add Kconfig option for Shadow Stack
x86/cpufeatures: Add CET CPU feature flags for Control-flow
Enforcement Technology (CET)
x86/cpufeatures: Introduce CPU setup and option parsing for CET
x86/fpu/xstate: Introduce CET MSR and XSAVES supervisor states
x86/cet: Add control-protection fault handler
x86/mm: Remove _PAGE_DIRTY from kernel RO pages
x86/mm: Move pmd_write(), pud_write() up in the file
x86/mm: Introduce _PAGE_COW
drm/i915/gvt: Change _PAGE_DIRTY to _PAGE_DIRTY_BITS
x86/mm: Update pte_modify for _PAGE_COW
x86/mm: Update ptep_set_wrprotect() and pmdp_set_wrprotect() for
transition from _PAGE_DIRTY to _PAGE_COW
mm: Move VM_UFFD_MINOR_BIT from 37 to 38
mm: Introduce VM_SHADOW_STACK for shadow stack memory
x86/mm: Shadow Stack page fault error checking
x86/mm: Update maybe_mkwrite() for shadow stack
mm: Fixup places that call pte_mkwrite() directly
mm: Add guard pages around a shadow stack.
mm/mmap: Add shadow stack pages to memory accounting
mm: Update can_follow_write_pte() for shadow stack
mm/mprotect: Exclude shadow stack from preserve_write
mm: Re-introduce vm_flags to do_mmap()
x86/cet/shstk: Add user-mode shadow stack support
x86/cet/shstk: Handle thread shadow stack
x86/cet/shstk: Introduce shadow stack token setup/verify routines
x86/cet/shstk: Handle signals for shadow stack
ELF: Introduce arch_setup_elf_property()
x86/cet/shstk: Add arch_prctl functions for shadow stack
mm: Move arch_calc_vm_prot_bits() to arch/x86/include/asm/mman.h
mm: Update arch_validate_flags() to test vma anonymous
mm: Introduce PROT_SHADOW_STACK for shadow stack
.../admin-guide/kernel-parameters.txt | 6 +
Documentation/filesystems/proc.rst | 1 +
Documentation/x86/index.rst | 1 +
Documentation/x86/intel_cet.rst | 136 +++++++
arch/arm64/include/asm/elf.h | 5 +
arch/arm64/include/asm/mman.h | 4 +-
arch/sparc/include/asm/mman.h | 4 +-
arch/x86/Kconfig | 24 ++
arch/x86/Kconfig.assembler | 5 +
arch/x86/ia32/ia32_signal.c | 25 +-
arch/x86/include/asm/cet.h | 53 +++
arch/x86/include/asm/cpufeatures.h | 2 +
arch/x86/include/asm/disabled-features.h | 8 +-
arch/x86/include/asm/elf.h | 11 +
arch/x86/include/asm/fpu/types.h | 23 +-
arch/x86/include/asm/fpu/xstate.h | 6 +-
arch/x86/include/asm/idtentry.h | 4 +
arch/x86/include/asm/mman.h | 88 +++++
arch/x86/include/asm/mmu_context.h | 3 +
arch/x86/include/asm/msr-index.h | 19 +
arch/x86/include/asm/page_types.h | 7 +
arch/x86/include/asm/pgtable.h | 299 +++++++++++++--
arch/x86/include/asm/pgtable_types.h | 48 ++-
arch/x86/include/asm/processor.h | 5 +
arch/x86/include/asm/special_insns.h | 30 ++
arch/x86/include/asm/trap_pf.h | 2 +
arch/x86/include/uapi/asm/mman.h | 28 +-
arch/x86/include/uapi/asm/prctl.h | 4 +
arch/x86/include/uapi/asm/processor-flags.h | 2 +
arch/x86/kernel/Makefile | 2 +
arch/x86/kernel/cet_prctl.c | 60 +++
arch/x86/kernel/cpu/common.c | 14 +
arch/x86/kernel/cpu/cpuid-deps.c | 2 +
arch/x86/kernel/fpu/xstate.c | 10 +-
arch/x86/kernel/idt.c | 4 +
arch/x86/kernel/process.c | 21 +-
arch/x86/kernel/process_64.c | 29 ++
arch/x86/kernel/shstk.c | 358 ++++++++++++++++++
arch/x86/kernel/signal.c | 13 +
arch/x86/kernel/signal_compat.c | 2 +-
arch/x86/kernel/traps.c | 63 +++
arch/x86/mm/fault.c | 19 +
arch/x86/mm/mmap.c | 48 +++
arch/x86/mm/pat/set_memory.c | 2 +-
arch/x86/mm/pgtable.c | 25 ++
drivers/gpu/drm/i915/gvt/gtt.c | 2 +-
fs/aio.c | 2 +-
fs/binfmt_elf.c | 4 +
fs/proc/task_mmu.c | 3 +
include/linux/elf.h | 6 +
include/linux/mm.h | 20 +-
include/linux/mman.h | 2 +-
include/linux/pgtable.h | 7 +
include/uapi/asm-generic/siginfo.h | 3 +-
include/uapi/linux/elf.h | 14 +
ipc/shm.c | 2 +-
mm/gup.c | 16 +-
mm/huge_memory.c | 27 +-
mm/memory.c | 5 +-
mm/migrate.c | 3 +-
mm/mmap.c | 17 +-
mm/mprotect.c | 11 +-
mm/nommu.c | 4 +-
mm/util.c | 2 +-
64 files changed, 1560 insertions(+), 115 deletions(-)
create mode 100644 Documentation/x86/intel_cet.rst
create mode 100644 arch/x86/include/asm/cet.h
create mode 100644 arch/x86/include/asm/mman.h
create mode 100644 arch/x86/kernel/cet_prctl.c
create mode 100644 arch/x86/kernel/shstk.c
--
2.21.0
next reply other threads:[~2021-05-21 22:13 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-21 22:11 Yu-cheng Yu [this message]
2021-05-21 22:11 ` [PATCH v27 01/31] Documentation/x86: Add CET description Yu-cheng Yu
2021-05-21 22:11 ` [PATCH v27 02/31] x86/cet/shstk: Add Kconfig option for Shadow Stack Yu-cheng Yu
2021-05-21 22:11 ` [PATCH v27 03/31] x86/cpufeatures: Add CET CPU feature flags for Control-flow Enforcement Technology (CET) Yu-cheng Yu
2021-05-21 22:11 ` [PATCH v27 04/31] x86/cpufeatures: Introduce CPU setup and option parsing for CET Yu-cheng Yu
2021-05-21 22:11 ` [PATCH v27 05/31] x86/fpu/xstate: Introduce CET MSR and XSAVES supervisor states Yu-cheng Yu
2021-05-21 22:11 ` [PATCH v27 06/31] x86/cet: Add control-protection fault handler Yu-cheng Yu
2021-05-21 22:11 ` [PATCH v27 07/31] x86/mm: Remove _PAGE_DIRTY from kernel RO pages Yu-cheng Yu
2021-05-21 22:11 ` [PATCH v27 08/31] x86/mm: Move pmd_write(), pud_write() up in the file Yu-cheng Yu
2021-05-21 22:11 ` [PATCH v27 09/31] x86/mm: Introduce _PAGE_COW Yu-cheng Yu
2021-05-21 22:11 ` [PATCH v27 10/31] drm/i915/gvt: Change _PAGE_DIRTY to _PAGE_DIRTY_BITS Yu-cheng Yu
2021-05-21 22:11 ` [PATCH v27 11/31] x86/mm: Update pte_modify for _PAGE_COW Yu-cheng Yu
2021-05-21 22:11 ` [PATCH v27 12/31] x86/mm: Update ptep_set_wrprotect() and pmdp_set_wrprotect() for transition from _PAGE_DIRTY to _PAGE_COW Yu-cheng Yu
2021-05-21 22:11 ` [PATCH v27 13/31] mm: Move VM_UFFD_MINOR_BIT from 37 to 38 Yu-cheng Yu
2021-05-21 22:25 ` Axel Rasmussen
2021-05-22 1:58 ` Yu, Yu-cheng
2021-05-21 22:11 ` [PATCH v27 14/31] mm: Introduce VM_SHADOW_STACK for shadow stack memory Yu-cheng Yu
2021-05-21 22:11 ` [PATCH v27 15/31] x86/mm: Shadow Stack page fault error checking Yu-cheng Yu
2021-05-21 22:11 ` [PATCH v27 16/31] x86/mm: Update maybe_mkwrite() for shadow stack Yu-cheng Yu
2021-05-21 22:11 ` [PATCH v27 17/31] mm: Fixup places that call pte_mkwrite() directly Yu-cheng Yu
2021-05-21 22:11 ` [PATCH v27 18/31] mm: Add guard pages around a shadow stack Yu-cheng Yu
2021-05-21 22:11 ` [PATCH v27 19/31] mm/mmap: Add shadow stack pages to memory accounting Yu-cheng Yu
2021-05-21 22:12 ` [PATCH v27 20/31] mm: Update can_follow_write_pte() for shadow stack Yu-cheng Yu
2021-05-21 22:12 ` [PATCH v27 21/31] mm/mprotect: Exclude shadow stack from preserve_write Yu-cheng Yu
2021-05-21 22:12 ` [PATCH v27 22/31] mm: Re-introduce vm_flags to do_mmap() Yu-cheng Yu
2021-05-21 22:12 ` [PATCH v27 23/31] x86/cet/shstk: Add user-mode shadow stack support Yu-cheng Yu
2021-07-19 18:23 ` Edgecombe, Rick P
2021-07-20 17:13 ` Yu, Yu-cheng
2021-05-21 22:12 ` [PATCH v27 24/31] x86/cet/shstk: Handle thread shadow stack Yu-cheng Yu
2021-05-22 23:39 ` Andy Lutomirski
2021-05-25 15:04 ` Yu, Yu-cheng
2021-07-21 18:14 ` John Allen
2021-07-21 18:28 ` Florian Weimer
2021-07-21 18:34 ` Yu, Yu-cheng
2021-07-28 21:34 ` John Allen
2021-07-21 18:37 ` Dave Hansen
2021-07-21 20:14 ` H.J. Lu
2021-05-21 22:12 ` [PATCH v27 25/31] x86/cet/shstk: Introduce shadow stack token setup/verify routines Yu-cheng Yu
2021-05-21 22:12 ` [PATCH v27 26/31] x86/cet/shstk: Handle signals for shadow stack Yu-cheng Yu
2021-05-21 22:12 ` [PATCH v27 27/31] ELF: Introduce arch_setup_elf_property() Yu-cheng Yu
2021-05-25 10:54 ` Catalin Marinas
2021-05-21 22:12 ` [PATCH v27 28/31] x86/cet/shstk: Add arch_prctl functions for shadow stack Yu-cheng Yu
2021-05-21 22:12 ` [PATCH v27 29/31] mm: Move arch_calc_vm_prot_bits() to arch/x86/include/asm/mman.h Yu-cheng Yu
2021-05-21 22:12 ` [PATCH v27 30/31] mm: Update arch_validate_flags() to test vma anonymous Yu-cheng Yu
2021-05-25 11:00 ` Catalin Marinas
2021-05-25 15:03 ` Yu, Yu-cheng
2021-05-21 22:12 ` [PATCH v27 31/31] mm: Introduce PROT_SHADOW_STACK for shadow stack Yu-cheng Yu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210521221211.29077-1-yu-cheng.yu@intel.com \
--to=yu-cheng.yu@intel.com \
--cc=Dave.Martin@arm.com \
--cc=arnd@arndb.de \
--cc=bp@alien8.de \
--cc=bsingharora@gmail.com \
--cc=corbet@lwn.net \
--cc=dave.hansen@linux.intel.com \
--cc=esyr@redhat.com \
--cc=fweimer@redhat.com \
--cc=gorcunov@gmail.com \
--cc=haitao.huang@intel.com \
--cc=hjl.tools@gmail.com \
--cc=hpa@zytor.com \
--cc=jannh@google.com \
--cc=keescook@chromium.org \
--cc=linux-api@vger.kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=luto@kernel.org \
--cc=mike.kravetz@oracle.com \
--cc=mingo@redhat.com \
--cc=nadav.amit@gmail.com \
--cc=oleg@redhat.com \
--cc=pavel@ucw.cz \
--cc=pengfei.xu@intel.com \
--cc=peterz@infradead.org \
--cc=ravi.v.shankar@intel.com \
--cc=rdunlap@infradead.org \
--cc=tglx@linutronix.de \
--cc=vedvyas.shanbhogue@intel.com \
--cc=weijiang.yang@intel.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).