[RFC PATCH v9 0/7] Control-flow Enforcement: Indirect Branch Tracking

Yu-cheng Yu
2020-02-05T18:23:01Z

Control-flow Enforcement (CET) is a new Intel processor feature that blocks
return/jump-oriented programming attacks. Details can be found in "Intel
64 and IA-32 Architectures Software Developer's Manual" [1].

This is the second half of CET and enables Indirect Branch Tracking (IBT).

Changes from v8:

- Remove a patch that adds the legacy bitmap size to memory accounting,
since the bitmap is now dynamically allocated.
- Change the legacy bitmap from a pre-defined address to
get_unmapped_area().
- Fix mis-handling of WAIT_ENDBR in signals
- Split out PTRACE, VDSO, opcode map, and Makefile changes and submit
separately.

[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] CET patches v8:

https://lkml.kernel.org/r/20190813205225.12032-1-yu-cheng.yu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org/
https://lkml.kernel.org/r/20190813205359.12196-1-yu-cheng.yu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org/

H.J. Lu (1):
x86/cet/ibt: Add arch_prctl functions for Indirect Branch Tracking

Yu-cheng Yu (6):
x86/cet/ibt: Add Kconfig option for user-mode Indirect Branch Tracking
x86/cet/ibt: User-mode Indirect Branch Tracking support
x86/cet/ibt: Handle signals for Indirect Branch Tracking
x86/cet/ibt: ELF header parsing for Indirect Branch Tracking
mm: Update alloc_set_pte() for zero page
x86/cet/ibt: Introduce arch_prctl(ARCH_X86_CET_MARK_LEGACY_CODE)

arch/x86/Kconfig | 17 ++
arch/x86/Makefile | 7 +
arch/x86/include/asm/cet.h | 7 +
arch/x86/include/asm/disabled-features.h | 8 +-
arch/x86/include/uapi/asm/prctl.h | 3 +
arch/x86/kernel/Makefile | 2 +-
arch/x86/kernel/cet.c | 58 ++++-
arch/x86/kernel/cet_bitmap.c | 226 ++++++++++++++++++
arch/x86/kernel/cet_prctl.c | 19 ++
arch/x86/kernel/cpu/common.c | 17 ++
arch/x86/kernel/fpu/signal.c | 8 +-
arch/x86/kernel/process_64.c | 5 +
mm/memory.c | 8 +
.../arch/x86/include/asm/disabled-features.h | 8 +-
14 files changed, 385 insertions(+), 8 deletions(-)
create mode 100644 arch/x86/kernel/cet_bitmap.c

--
2.21.0