diff options
author | Andreas Kling <awesomekling@gmail.com> | 2020-01-06 13:05:40 +0100 |
---|---|---|
committer | Andreas Kling <awesomekling@gmail.com> | 2020-01-06 13:05:40 +0100 |
commit | 99f71a9a2cdcbcf5f376dc482a833a1510fb41f2 (patch) | |
tree | 2a6324af8339190eb8898cb79fd5867b853e13a3 | |
parent | 0614c3dd3c41d91fb72bc421dd10325e17c82fc0 (diff) | |
download | serenity-99f71a9a2cdcbcf5f376dc482a833a1510fb41f2.zip |
Kernel: Randomize the stack canary on startup
-rw-r--r-- | Kernel/StdLib.cpp | 3 | ||||
-rw-r--r-- | Kernel/init.cpp | 6 |
2 files changed, 6 insertions, 3 deletions
diff --git a/Kernel/StdLib.cpp b/Kernel/StdLib.cpp index 8407882089..bbc4a8b347 100644 --- a/Kernel/StdLib.cpp +++ b/Kernel/StdLib.cpp @@ -213,9 +213,6 @@ void free(void* p) return kfree(p); } -extern u32 __stack_chk_guard; -u32 __stack_chk_guard = (u32)0xc0000c13; - [[noreturn]] void __stack_chk_fail() { ASSERT_NOT_REACHED(); diff --git a/Kernel/init.cpp b/Kernel/init.cpp index b01d496abe..b7df3d8691 100644 --- a/Kernel/init.cpp +++ b/Kernel/init.cpp @@ -44,6 +44,7 @@ #include <Kernel/Net/RTL8139NetworkAdapter.h> #include <Kernel/PCI/Access.h> #include <Kernel/PCI/Initializer.h> +#include <Kernel/Random.h> #include <Kernel/TTY/PTYMultiplexer.h> #include <Kernel/TTY/VirtualConsole.h> #include <Kernel/VM/MemoryManager.h> @@ -219,6 +220,9 @@ extern "C" int __cxa_atexit(void (*)(void*), void*, void*) return 0; } +extern u32 __stack_chk_guard; +u32 __stack_chk_guard; + extern "C" [[noreturn]] void init(u32 physical_address_for_kernel_page_tables) { // this is only used one time, directly below here. we can't use this part @@ -313,6 +317,8 @@ extern "C" [[noreturn]] void init(u32 physical_address_for_kernel_page_tables) kprintf("x86: No RDRAND support detected. Randomness will be shitty\n"); } + __stack_chk_guard = get_good_random<u32>(); + RTC::initialize(); PIC::initialize(); gdt_init(); |