On Fri, Apr 26, 2024 at 03:29:44PM -0700, Kees Cook wrote: > Add some stuff that got missed along the way: > > - CONFIG_UNWIND_PATCH_PAC_INTO_SCS=y so SCS vs PAC is hardware > selectable. > > - CONFIG_X86_KERNEL_IBT=y while a default, just be sure. > > - CONFIG_CFI_CLANG=y for x86 and arm64. (And disable FINEIBT since > it isn't as secure as straight KCFI.) > > - CONFIG_PAGE_TABLE_CHECK=y for userspace mapping sanity. > > Signed-off-by: Kees Cook <keesc...@chromium.org>
Seems reasonable to me. Reviewed-by: Nathan Chancellor <nat...@kernel.org> One comment below. > --- > Cc: "Gustavo A. R. Silva" <gustavo...@kernel.org> > Cc: Catalin Marinas <catalin.mari...@arm.com> > Cc: Will Deacon <w...@kernel.org> > Cc: Thomas Gleixner <t...@linutronix.de> > Cc: Ingo Molnar <mi...@redhat.com> > Cc: Borislav Petkov <b...@alien8.de> > Cc: Dave Hansen <dave.han...@linux.intel.com> > Cc: x...@kernel.org > Cc: "H. Peter Anvin" <h...@zytor.com> > Cc: Nathan Chancellor <nat...@kernel.org> > Cc: Nick Desaulniers <ndesaulni...@google.com> > Cc: Bill Wendling <mo...@google.com> > Cc: Justin Stitt <justinst...@google.com> > Cc: linux-hardening@vger.kernel.org > Cc: linux-arm-ker...@lists.infradead.org > Cc: l...@lists.linux.dev > --- > arch/arm64/configs/hardening.config | 5 +++++ > arch/x86/configs/hardening.config | 9 +++++++++ > kernel/configs/hardening.config | 4 ++++ > 3 files changed, 18 insertions(+) > > diff --git a/arch/arm64/configs/hardening.config > b/arch/arm64/configs/hardening.config > index b0e795208998..e8a18fec7a3e 100644 > --- a/arch/arm64/configs/hardening.config > +++ b/arch/arm64/configs/hardening.config > @@ -5,6 +5,7 @@ CONFIG_ARM64_SW_TTBR0_PAN=y > > # Software Shadow Stack or PAC > CONFIG_SHADOW_CALL_STACK=y > +CONFIG_UNWIND_PATCH_PAC_INTO_SCS=y > > # Pointer authentication (ARMv8.3 and later). If hardware actually supports > # it, one can turn off CONFIG_STACKPROTECTOR_STRONG with this enabled. > @@ -20,3 +21,7 @@ CONFIG_ARM64_E0PD=y > > # Available in ARMv8.7 and later. > CONFIG_ARM64_EPAN=y > + > +# Enable Kernel Control Flow Integrity (currently Clang only). > +CONFIG_CFI_CLANG=y > +# CONFIG_CFI_PERMISSIVE is not set Should this be a part of kernel/configs/hardening.config because RISC-V supports it (and 32-bit ARM will soon too)? > diff --git a/arch/x86/configs/hardening.config > b/arch/x86/configs/hardening.config > index 7b497f3b7bc3..b47e5f411dd3 100644 > --- a/arch/x86/configs/hardening.config > +++ b/arch/x86/configs/hardening.config > @@ -10,5 +10,14 @@ CONFIG_INTEL_IOMMU_DEFAULT_ON=y > CONFIG_INTEL_IOMMU_SVM=y > CONFIG_AMD_IOMMU=y > > +# Enforce CET Indirect Branch Tracking in the kernel. > +CONFIG_X86_KERNEL_IBT=y > + > +# Enable Kernel Control Flow Integrity (currently Clang only), but disable > +# weaker FINEIBT landing pads. > +CONFIG_CFI_CLANG=y > +# CONFIG_CFI_PERMISSIVE is not set > +# CONFIG_FINEIBT is not set > + > # Enable CET Shadow Stack for userspace. > CONFIG_X86_USER_SHADOW_STACK=y > diff --git a/kernel/configs/hardening.config b/kernel/configs/hardening.config > index 7a5bbfc024b7..4be0de1f085c 100644 > --- a/kernel/configs/hardening.config > +++ b/kernel/configs/hardening.config > @@ -23,6 +23,10 @@ CONFIG_SLAB_FREELIST_HARDENED=y > CONFIG_SHUFFLE_PAGE_ALLOCATOR=y > CONFIG_RANDOM_KMALLOC_CACHES=y > > +# Sanity check userspace page table mappings. > +CONFIG_PAGE_TABLE_CHECK=y > +CONFIG_PAGE_TABLE_CHECK_ENFORCED=y > + > # Randomize kernel stack offset on syscall entry. > CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT=y > > -- > 2.34.1 >