LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
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>,
Dave Martin <Dave.Martin@arm.com>,
Weijiang Yang <weijiang.yang@intel.com>,
Pengfei Xu <pengfei.xu@intel.com>,
Haitao Huang <haitao.huang@intel.com>,
Rick P Edgecombe <rick.p.edgecombe@intel.com>
Cc: Yu-cheng Yu <yu-cheng.yu@intel.com>
Subject: [PATCH v30 00/32] Control-flow Enforcement: Shadow Stack
Date: Mon, 30 Aug 2021 11:14:56 -0700 [thread overview]
Message-ID: <20210830181528.1569-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 is further split into the Shadow Stack
and Indirect Branch Tracking.
Linux distributions with CET are available now. The patches being sent are
regularly applied to upstream Linus tree and tested by Zero-day service and
verified in all configurations of GLIBC tests. In addition, Linux kernel
selftests/x86 has been updated and run with CET enabled. Selftests patches
v2 will be sent separately [2].
Changes in v30:
- Patch #12: Replace (pmdval_t) cast with CONFIG_PGTABLE_LEVELES > 2.
- Patch #15: Update Subject line and add a verb.
- Patch #23: Remove superfluous comments for struct thread_shstk. Replace
'populate' with 'unused'.
- Patch #25: Update comments about clone()/clone3().
- Patch #26: Update commit log and various comments. Remove variable init.
Replace 'ia32' with 'proc32'.
- Rebase to Linus tree v5.14.
Changes in v29:
- Patch #5: Move CET MSR definitions up in msr-index.h.
- Patch #6: Remove pr_emerg() from CP fault handler, since that is followed by die().
- Patch #16: Remove likely().
- Patch #25: Add WARN_ON_ONCE() when get_xsave_addr() returns NULL (Dave Hansen).
- Rebased to Linus tree v5.14-rc6.
Changes in v28:
- Patch #1: Update Document to indicate no-user-shstk also disables IBT.
- Patch #23: Update shstk_setup() with wrmsrl_safe(). Update return value.
- Patch #25: Split out copy_thread() changes. Add support for old clone().
Add comments.
- Add comments for get_xsave_addr() (Patch #25, #26).
- Rebase to Linus tree v5.14-rc2.
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] Selftests patches v1:
https://lkml.kernel.org/r/20200521211720.20236-1-yu-cheng.yu@intel.com/
Yu-cheng Yu (32):
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: Check Shadow Stack page fault errors
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/process: Change copy_thread() argument 'arg' to 'stack_size'
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 | 7 +
Documentation/filesystems/proc.rst | 1 +
Documentation/x86/index.rst | 1 +
Documentation/x86/intel_cet.rst | 139 +++++++
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 | 50 +++
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 | 20 +
arch/x86/include/asm/page_types.h | 7 +
arch/x86/include/asm/pgtable.h | 302 ++++++++++++--
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 | 11 +-
arch/x86/kernel/idt.c | 4 +
arch/x86/kernel/process.c | 21 +-
arch/x86/kernel/process_64.c | 27 ++
arch/x86/kernel/shstk.c | 376 ++++++++++++++++++
arch/x86/kernel/signal.c | 13 +
arch/x86/kernel/signal_compat.c | 2 +-
arch/x86/kernel/traps.c | 62 +++
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, 1581 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-08-30 18:17 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-30 18:14 Yu-cheng Yu [this message]
2021-08-30 18:14 ` [PATCH v30 01/32] Documentation/x86: Add CET description Yu-cheng Yu
2021-10-05 14:26 ` Dave Hansen
2021-08-30 18:14 ` [PATCH v30 02/32] x86/cet/shstk: Add Kconfig option for Shadow Stack Yu-cheng Yu
2021-08-30 18:14 ` [PATCH v30 03/32] x86/cpufeatures: Add CET CPU feature flags for Control-flow Enforcement Technology (CET) Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 04/32] x86/cpufeatures: Introduce CPU setup and option parsing for CET Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 05/32] x86/fpu/xstate: Introduce CET MSR and XSAVES supervisor states Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 06/32] x86/cet: Add control-protection fault handler Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 07/32] x86/mm: Remove _PAGE_DIRTY from kernel RO pages Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 08/32] x86/mm: Move pmd_write(), pud_write() up in the file Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 09/32] x86/mm: Introduce _PAGE_COW Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 10/32] drm/i915/gvt: Change _PAGE_DIRTY to _PAGE_DIRTY_BITS Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 11/32] x86/mm: Update pte_modify for _PAGE_COW Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 12/32] x86/mm: Update ptep_set_wrprotect() and pmdp_set_wrprotect() for transition from _PAGE_DIRTY to _PAGE_COW Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 13/32] mm: Move VM_UFFD_MINOR_BIT from 37 to 38 Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 14/32] mm: Introduce VM_SHADOW_STACK for shadow stack memory Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 15/32] x86/mm: Check Shadow Stack page fault errors Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 16/32] x86/mm: Update maybe_mkwrite() for shadow stack Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 17/32] mm: Fixup places that call pte_mkwrite() directly Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 18/32] mm: Add guard pages around a shadow stack Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 19/32] mm/mmap: Add shadow stack pages to memory accounting Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 20/32] mm: Update can_follow_write_pte() for shadow stack Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 21/32] mm/mprotect: Exclude shadow stack from preserve_write Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 22/32] mm: Re-introduce vm_flags to do_mmap() Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 23/32] x86/cet/shstk: Add user-mode shadow stack support Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 24/32] x86/process: Change copy_thread() argument 'arg' to 'stack_size' Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 25/32] x86/cet/shstk: Handle thread shadow stack Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 26/32] x86/cet/shstk: Introduce shadow stack token setup/verify routines Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 27/32] x86/cet/shstk: Handle signals for shadow stack Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 28/32] ELF: Introduce arch_setup_elf_property() Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 29/32] x86/cet/shstk: Add arch_prctl functions for shadow stack Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 30/32] mm: Move arch_calc_vm_prot_bits() to arch/x86/include/asm/mman.h Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 31/32] mm: Update arch_validate_flags() to test vma anonymous Yu-cheng Yu
2021-08-30 18:15 ` [PATCH v30 32/32] 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=20210830181528.1569-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=rick.p.edgecombe@intel.com \
--cc=tglx@linutronix.de \
--cc=weijiang.yang@intel.com \
--cc=x86@kernel.org \
--subject='Re: [PATCH v30 00/32] Control-flow Enforcement: Shadow Stack' \
/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
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).