From 99f71a9a2cdcbcf5f376dc482a833a1510fb41f2 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 6 Jan 2020 13:05:40 +0100 Subject: [PATCH] Kernel: Randomize the stack canary on startup --- Kernel/StdLib.cpp | 3 --- 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 #include #include +#include #include #include #include @@ -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(); + RTC::initialize(); PIC::initialize(); gdt_init();