From 13f93b8e2174535298fef9d77f89cb27099ebde1 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 17 Nov 2022 19:09:43 +0200 Subject: [PATCH] Stop tasking when stack guard fails --- Core/StackGuard.c | 2 ++ Kernel.cpp | 8 +++++++- kernel.h | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Core/StackGuard.c b/Core/StackGuard.c index cf3a67f8..f25db448 100644 --- a/Core/StackGuard.c +++ b/Core/StackGuard.c @@ -34,6 +34,7 @@ static void __attribute__((constructor, no_stack_protector)) __construct_stk_chk __attribute__((weak, noreturn, no_stack_protector)) void __stack_chk_fail(void) { + TaskingPanic(); error("Stack smashing detected!"); KPrint("\eFF0000Stack smashing detected!"); #if defined(__amd64__) || defined(__i386__) @@ -49,6 +50,7 @@ __attribute__((weak, noreturn, no_stack_protector)) void __stack_chk_fail(void) // https://github.com/gcc-mirror/gcc/blob/master/libssp/ssp.c __attribute__((weak, noreturn, no_stack_protector)) void __chk_fail(void) { + TaskingPanic(); error("Buffer overflow detected!"); KPrint("\eFF0000Buffer overflow detected!"); for (;;) diff --git a/Kernel.cpp b/Kernel.cpp index ef3bae01..6bc4d465 100644 --- a/Kernel.cpp +++ b/Kernel.cpp @@ -79,7 +79,7 @@ EXTERNC void Entry(BootInfo *Info) } KPrint("Enabling Interrupts on Bootstrap Processor"); Interrupts::Enable(0); - #if defined(__amd64__) +#if defined(__amd64__) PowerManager->InitDSDT(); #elif defined(__i386__) // FIXME: Add ACPI support for i386 @@ -101,3 +101,9 @@ EXTERNC void Entry(BootInfo *Info) KPrint("\e058C19################################"); CPU::Halt(true); } + +EXTERNC void TaskingPanic() +{ + if (TaskManager) + TaskManager->Panic(); +} diff --git a/kernel.h b/kernel.h index 874eb619..bfb6cff5 100644 --- a/kernel.h +++ b/kernel.h @@ -38,6 +38,7 @@ extern Disk::Manager *DiskManager; EXTERNC void putchar(char c); EXTERNC void KPrint(const char *format, ...); EXTERNC void Entry(struct BootInfo *Info); +EXTERNC void TaskingPanic(); EXTERNC void KernelMainThread(); EXTERNC void KernelShutdownThread(bool Reboot);