diff --git a/Base/usr/share/man/man7/boot_parameters.md b/Base/usr/share/man/man7/boot_parameters.md index 9618e93a00..4765146136 100644 --- a/Base/usr/share/man/man7/boot_parameters.md +++ b/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). diff --git a/Kernel/Prekernel/init.cpp b/Kernel/Prekernel/init.cpp index 26a4c4d95a..44acfcf07b 100644 --- a/Kernel/Prekernel/init.cpp +++ b/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++) {