From 11641b1ff3f226d49212dec140fe3e5d6569bc47 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 17 Nov 2022 03:32:38 +0200 Subject: [PATCH] Better(?) stack guard --- Core/StackGuard.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/Core/StackGuard.c b/Core/StackGuard.c index 3c9ec84..cf3a67f 100644 --- a/Core/StackGuard.c +++ b/Core/StackGuard.c @@ -1,6 +1,8 @@ #include #include +#include "../kernel.h" + #ifndef STACK_CHK_GUARD_VALUE #if UINTPTR_MAX == UINT32_MAX #define STACK_CHK_GUARD_VALUE 0x25F6CC8D @@ -32,25 +34,30 @@ static void __attribute__((constructor, no_stack_protector)) __construct_stk_chk __attribute__((weak, noreturn, no_stack_protector)) void __stack_chk_fail(void) { - error("Stack smashing detected!", false); - for (;;) - { + error("Stack smashing detected!"); + KPrint("\eFF0000Stack smashing detected!"); #if defined(__amd64__) || defined(__i386__) - asmv("hlt"); + asmv("loop__stack_chk_fail:\n" + "cli\n" + "hlt\n" + "jmp loop__stack_chk_fail\n"); #elif defined(__aarch64__) - asmv("wfe"); + asmv("wfe"); #endif - } } // https://github.com/gcc-mirror/gcc/blob/master/libssp/ssp.c __attribute__((weak, noreturn, no_stack_protector)) void __chk_fail(void) { - error("Buffer overflow detected!", false); + error("Buffer overflow detected!"); + KPrint("\eFF0000Buffer overflow detected!"); for (;;) { #if defined(__amd64__) || defined(__i386__) - asmv("hlt"); + asmv("loop__chk_fail:\n" + "cli\n" + "hlt\n" + "jmp loop__chk_fail\n"); #elif defined(__aarch64__) asmv("wfe"); #endif