summaryrefslogtreecommitdiff
path: root/Kernel/Prekernel
diff options
context:
space:
mode:
authorIdan Horowitz <idan.horowitz@gmail.com>2022-03-25 00:02:52 +0200
committerLinus Groh <mail@linusgroh.de>2022-03-24 23:36:56 +0000
commitf9c6f37bacac96a695f99a66d55a14c2a52d0c4d (patch)
tree8da8d698ac804cc9ff0c0a1be905bb2360a93938 /Kernel/Prekernel
parent54a12d34eb3acd5ceb29fb9c49d429a4cb0ee2f7 (diff)
downloadserenity-f9c6f37bacac96a695f99a66d55a14c2a52d0c4d.zip
Kernel: Add a 'disable_kaslr' kernel command line parameter
This parameter can be used to disable the KASLR mechanism.
Diffstat (limited to 'Kernel/Prekernel')
-rw-r--r--Kernel/Prekernel/init.cpp11
1 files changed, 7 insertions, 4 deletions
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++) {