浏览代码

Kernel: Add a 'disable_kaslr' kernel command line parameter

This parameter can be used to disable the KASLR mechanism.
Idan Horowitz 3 年之前
父节点
当前提交
f9c6f37bac
共有 2 个文件被更改,包括 9 次插入4 次删除
  1. 2 0
      Base/usr/share/man/man7/boot_parameters.md
  2. 7 4
      Kernel/Prekernel/init.cpp

+ 2 - 0
Base/usr/share/man/man7/boot_parameters.md

@@ -89,6 +89,8 @@ List of options:
 * **`vmmouse`** - This parameter expects a binary value of **`on`** or **`off`**. If enabled and
   running on a VMWare Hypervisor, the kernel will enable absolute mouse mode.
 
+* **`disable_kaslr`** - If present on the command line, the KASLR security mitigation will be disabled.
+
 ## See also
 
 * [`SystemServer`(7)](help://man/7/SystemServer).

+ 7 - 4
Kernel/Prekernel/init.cpp

@@ -96,10 +96,13 @@ extern "C" [[noreturn]] void init()
     FlatPtr default_kernel_load_base = 0x2000200000;
 #endif
 
-    // KASLR
-    FlatPtr maximum_offset = (FlatPtr)KERNEL_PD_SIZE - MAX_KERNEL_SIZE - 2 * MiB; // The first 2 MiB are used for mapping the pre-kernel
-    FlatPtr kernel_load_base = default_kernel_load_base + (generate_secure_seed() % maximum_offset);
-    kernel_load_base &= ~(2 * MiB - 1);
+    FlatPtr kernel_load_base = default_kernel_load_base;
+
+    if (__builtin_strstr(kernel_cmdline, "disable_kaslr") == nullptr) {
+        FlatPtr maximum_offset = (FlatPtr)KERNEL_PD_SIZE - MAX_KERNEL_SIZE - 2 * MiB; // The first 2 MiB are used for mapping the pre-kernel
+        kernel_load_base += (generate_secure_seed() % maximum_offset);
+        kernel_load_base &= ~(2 * MiB - 1);
+    }
 
     FlatPtr kernel_load_end = 0;
     for (size_t i = 0; i < kernel_elf_header.e_phnum; i++) {