x86/cpu: Remove "noexec"
authorBorislav Petkov <bp@suse.de>
Thu, 27 Jan 2022 11:56:25 +0000 (12:56 +0100)
committerBorislav Petkov <bp@suse.de>
Mon, 4 Apr 2022 08:17:03 +0000 (10:17 +0200)
It doesn't make any sense to disable non-executable mappings -
security-wise or else.

So rip out that switch and move the remaining code into setup.c and
delete setup_nx.c

Signed-off-by: Borislav Petkov <bp@suse.de>
Reviewed-by: Lai Jiangshan <jiangshanlai@gmail.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/r/20220127115626.14179-6-bp@alien8.de
Documentation/admin-guide/kernel-parameters.txt
Documentation/x86/x86_64/boot-options.rst
arch/x86/include/asm/proto.h
arch/x86/kernel/setup.c
arch/x86/mm/Makefile
arch/x86/mm/init_64.c
arch/x86/mm/setup_nx.c [deleted file]

index 39ac2c14dd71b834be8f07e08a6ddd034ace03a2..a2299b2ff2c85ef943a5653b099a0e19aac3485f 100644 (file)
 
        noexec          [IA-64]
 
-       noexec          [X86]
-                       On X86-32 available only on PAE configured kernels.
-                       noexec=on: enable non-executable mappings (default)
-                       noexec=off: disable non-executable mappings
-
        nosmap          [PPC]
                        Disable SMAP (Supervisor Mode Access Prevention)
                        even if it is supported by processor.
index 07aa0007f346e86085def5a0a70311de051c3e02..fb6030a25f082acbfaabea0eac320f48845ea755 100644 (file)
@@ -157,15 +157,6 @@ Rebooting
      newer BIOS, or newer board) using this option will ignore the built-in
      quirk table, and use the generic default reboot actions.
 
-Non Executable Mappings
-=======================
-
-  noexec=on|off
-    on
-      Enable(default)
-    off
-      Disable
-
 NUMA
 ====
 
index feed36d44d0440f1739f1f63d4c7826331940132..0f899c8d7a4e0047ea472ac8bfc996ef7f0bb12a 100644 (file)
@@ -35,7 +35,6 @@ void xen_entry_INT80_compat(void);
 #endif
 
 void x86_configure_nx(void);
-void x86_report_nx(void);
 
 extern int reboot_force;
 
index c95b9ac5a4571a30181af4a3e4082bd7af7ed601..249981bf3d8aa4a5a8e973142b7f81bb65d9f3db 100644 (file)
@@ -756,6 +756,30 @@ dump_kernel_offset(struct notifier_block *self, unsigned long v, void *p)
        return 0;
 }
 
+void x86_configure_nx(void)
+{
+       if (boot_cpu_has(X86_FEATURE_NX))
+               __supported_pte_mask |= _PAGE_NX;
+       else
+               __supported_pte_mask &= ~_PAGE_NX;
+}
+
+static void __init x86_report_nx(void)
+{
+       if (!boot_cpu_has(X86_FEATURE_NX)) {
+               printk(KERN_NOTICE "Notice: NX (Execute Disable) protection "
+                      "missing in CPU!\n");
+       } else {
+#if defined(CONFIG_X86_64) || defined(CONFIG_X86_PAE)
+               printk(KERN_INFO "NX (Execute Disable) protection: active\n");
+#else
+               /* 32bit non-PAE kernel, NX cannot be used */
+               printk(KERN_NOTICE "Notice: NX (Execute Disable) protection "
+                      "cannot be enabled: non-PAE kernel!\n");
+#endif
+       }
+}
+
 /*
  * Determine if we were loaded by an EFI loader.  If so, then we have also been
  * passed the efi memmap, systab, etc., so we should use these data structures
@@ -896,9 +920,7 @@ void __init setup_arch(char **cmdline_p)
        /*
         * x86_configure_nx() is called before parse_early_param() to detect
         * whether hardware doesn't support NX (so that the early EHCI debug
-        * console setup can safely call set_fixmap()). It may then be called
-        * again from within noexec_setup() during parsing early parameters
-        * to honor the respective command line option.
+        * console setup can safely call set_fixmap()).
         */
        x86_configure_nx();
 
index fe3d3061fc116a7780e28e3f604aef4aa0ea185d..d957dc15b3712890af49639cfe470208609d9f37 100644 (file)
@@ -20,13 +20,12 @@ CFLAGS_REMOVE_mem_encrypt_identity.o        = -pg
 endif
 
 obj-y                          :=  init.o init_$(BITS).o fault.o ioremap.o extable.o mmap.o \
-                                   pgtable.o physaddr.o setup_nx.o tlb.o cpu_entry_area.o maccess.o
+                                   pgtable.o physaddr.o tlb.o cpu_entry_area.o maccess.o
 
 obj-y                          += pat/
 
 # Make sure __phys_addr has no stackprotector
 CFLAGS_physaddr.o              := -fno-stack-protector
-CFLAGS_setup_nx.o              := -fno-stack-protector
 CFLAGS_mem_encrypt_identity.o  := -fno-stack-protector
 
 CFLAGS_fault.o := -I $(srctree)/$(src)/../include/asm/trace
index 96d34ebb20a9e1e09e3a9e8eaf41f464a264d87e..d2e484efdfa1bf9e2427795ef5b65e2cb6dd0640 100644 (file)
@@ -110,7 +110,6 @@ int force_personality32;
 /*
  * noexec32=on|off
  * Control non executable heap for 32bit processes.
- * To control the stack too use noexec=off
  *
  * on  PROT_READ does not imply PROT_EXEC for 32-bit processes (default)
  * off PROT_READ implies PROT_EXEC
diff --git a/arch/x86/mm/setup_nx.c b/arch/x86/mm/setup_nx.c
deleted file mode 100644 (file)
index ed5667f..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-#include <linux/spinlock.h>
-#include <linux/errno.h>
-#include <linux/init.h>
-#include <linux/pgtable.h>
-
-#include <asm/proto.h>
-#include <asm/cpufeature.h>
-
-static int disable_nx;
-
-/*
- * noexec = on|off
- *
- * Control non-executable mappings for processes.
- *
- * on      Enable
- * off     Disable
- */
-static int __init noexec_setup(char *str)
-{
-       if (!str)
-               return -EINVAL;
-       if (!strncmp(str, "on", 2)) {
-               disable_nx = 0;
-       } else if (!strncmp(str, "off", 3)) {
-               disable_nx = 1;
-       }
-       x86_configure_nx();
-       return 0;
-}
-early_param("noexec", noexec_setup);
-
-void x86_configure_nx(void)
-{
-       if (boot_cpu_has(X86_FEATURE_NX) && !disable_nx)
-               __supported_pte_mask |= _PAGE_NX;
-       else
-               __supported_pte_mask &= ~_PAGE_NX;
-}
-
-void __init x86_report_nx(void)
-{
-       if (!boot_cpu_has(X86_FEATURE_NX)) {
-               printk(KERN_NOTICE "Notice: NX (Execute Disable) protection "
-                      "missing in CPU!\n");
-       } else {
-#if defined(CONFIG_X86_64) || defined(CONFIG_X86_PAE)
-               if (disable_nx) {
-                       printk(KERN_INFO "NX (Execute Disable) protection: "
-                              "disabled by kernel command line option\n");
-               } else {
-                       printk(KERN_INFO "NX (Execute Disable) protection: "
-                              "active\n");
-               }
-#else
-               /* 32bit non-PAE kernel, NX cannot be used */
-               printk(KERN_NOTICE "Notice: NX (Execute Disable) protection "
-                      "cannot be enabled: non-PAE kernel!\n");
-#endif
-       }
-}