diff options
author | Idan Horowitz <idan.horowitz@gmail.com> | 2022-03-25 00:02:52 +0200 |
---|---|---|
committer | Linus Groh <mail@linusgroh.de> | 2022-03-24 23:36:56 +0000 |
commit | f9c6f37bacac96a695f99a66d55a14c2a52d0c4d (patch) | |
tree | 8da8d698ac804cc9ff0c0a1be905bb2360a93938 /Kernel/Prekernel | |
parent | 54a12d34eb3acd5ceb29fb9c49d429a4cb0ee2f7 (diff) | |
download | serenity-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.cpp | 11 |
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++) { |