Merge tag 'perf-tools-fixes-for-v5.12-2020-03-28' of git://git.kernel.org/pub/scm...
[linux-2.6-microblaze.git] / arch / arm64 / kernel / kaslr.c
index 1c74c45..27f8939 100644 (file)
@@ -19,6 +19,7 @@
 #include <asm/memory.h>
 #include <asm/mmu.h>
 #include <asm/sections.h>
+#include <asm/setup.h>
 
 enum kaslr_status {
        KASLR_ENABLED,
@@ -50,39 +51,7 @@ static __init u64 get_kaslr_seed(void *fdt)
        return ret;
 }
 
-static __init bool cmdline_contains_nokaslr(const u8 *cmdline)
-{
-       const u8 *str;
-
-       str = strstr(cmdline, "nokaslr");
-       return str == cmdline || (str > cmdline && *(str - 1) == ' ');
-}
-
-static __init bool is_kaslr_disabled_cmdline(void *fdt)
-{
-       if (!IS_ENABLED(CONFIG_CMDLINE_FORCE)) {
-               int node;
-               const u8 *prop;
-
-               node = fdt_path_offset(fdt, "/chosen");
-               if (node < 0)
-                       goto out;
-
-               prop = fdt_getprop(fdt, node, "bootargs", NULL);
-               if (!prop)
-                       goto out;
-
-               if (cmdline_contains_nokaslr(prop))
-                       return true;
-
-               if (IS_ENABLED(CONFIG_CMDLINE_EXTEND))
-                       goto out;
-
-               return false;
-       }
-out:
-       return cmdline_contains_nokaslr(CONFIG_CMDLINE);
-}
+struct arm64_ftr_override kaslr_feature_override __initdata;
 
 /*
  * This routine will be executed with the kernel mapped at its default virtual
@@ -92,12 +61,11 @@ out:
  * containing function pointers) to be reinitialized, and zero-initialized
  * .bss variables will be reset to 0.
  */
-u64 __init kaslr_early_init(u64 dt_phys)
+u64 __init kaslr_early_init(void)
 {
        void *fdt;
        u64 seed, offset, mask, module_range;
        unsigned long raw;
-       int size;
 
        /*
         * Set a reasonable default for module_alloc_base in case
@@ -111,8 +79,7 @@ u64 __init kaslr_early_init(u64 dt_phys)
         * and proceed with KASLR disabled. We will make another
         * attempt at mapping the FDT in setup_machine()
         */
-       early_fixmap_init();
-       fdt = fixmap_remap_fdt(dt_phys, &size, PAGE_KERNEL);
+       fdt = get_early_fdt_ptr();
        if (!fdt) {
                kaslr_status = KASLR_DISABLED_FDT_REMAP;
                return 0;
@@ -127,7 +94,7 @@ u64 __init kaslr_early_init(u64 dt_phys)
         * Check if 'nokaslr' appears on the command line, and
         * return 0 if that is the case.
         */
-       if (is_kaslr_disabled_cmdline(fdt)) {
+       if (kaslr_feature_override.val & kaslr_feature_override.mask & 0xf) {
                kaslr_status = KASLR_DISABLED_CMDLINE;
                return 0;
        }