summaryrefslogtreecommitdiff
path: root/kernel/src
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksav013@gmail.com>2022-11-27 19:25:27 +0100
committerAleksa Vuckovic <aleksav013@gmail.com>2022-11-27 19:25:27 +0100
commit450b9160fdcdb0b770b316caf1d72ab893bc7aa5 (patch)
treed56e5978929f9bb2b6378be4c5279db65684e1c5 /kernel/src
parentd43a3388a976a74ae109c5b8b5a31f82a16b45db (diff)
panic & ssp
Diffstat (limited to 'kernel/src')
-rw-r--r--kernel/src/check/panic.c12
-rw-r--r--kernel/src/check/ssp.c14
-rw-r--r--kernel/src/check/ubsan.c (renamed from kernel/src/ubsan/ubsan.c)6
-rw-r--r--kernel/src/cpu/irq.c31
4 files changed, 59 insertions, 4 deletions
diff --git a/kernel/src/check/panic.c b/kernel/src/check/panic.c
new file mode 100644
index 0000000..0480633
--- /dev/null
+++ b/kernel/src/check/panic.c
@@ -0,0 +1,12 @@
+#include <libk/stdio.h>
+#include <panic.h>
+
+__attribute__((noreturn))
+void panic()
+{
+ printf("PANIC MODE ENETERED");
+ __asm__ volatile ("cli;");
+ for(;;) {
+ __asm__ volatile ("hlt;");
+ }
+}
diff --git a/kernel/src/check/ssp.c b/kernel/src/check/ssp.c
new file mode 100644
index 0000000..4b9c72a
--- /dev/null
+++ b/kernel/src/check/ssp.c
@@ -0,0 +1,14 @@
+#include <types.h>
+#include <libk/stdio.h>
+#include <panic.h>
+
+#define STACK_CHK_GUARD 0xdeadbeefcafebabe
+
+uintptr_t __stack_chk_guard = STACK_CHK_GUARD;
+
+__attribute__((noreturn))
+void __stack_chk_fail(void)
+{
+ printf("Stack smashing detected");
+ panic();
+}
diff --git a/kernel/src/ubsan/ubsan.c b/kernel/src/check/ubsan.c
index 9cd744d..8a5f998 100644
--- a/kernel/src/ubsan/ubsan.c
+++ b/kernel/src/check/ubsan.c
@@ -21,6 +21,7 @@
#include <libk/stdio.h>
#include <libk/serial_stdio.h>
#include <ubsan.h>
+#include <panic.h>
struct ubsan_source_location
{
@@ -55,10 +56,7 @@ static void ubsan_abort(const struct ubsan_source_location* location,
printf(
"filename = %s; line = %d; column = %d; violation = %s;\n",
location->filename, location->line, location->column, violation);
-
- for(;;) {
- __asm__ volatile ("hlt;");
- }
+ panic();
}
#define ABORT_VARIANT(name, params, call) \
diff --git a/kernel/src/cpu/irq.c b/kernel/src/cpu/irq.c
index 2695d4d..a345251 100644
--- a/kernel/src/cpu/irq.c
+++ b/kernel/src/cpu/irq.c
@@ -8,6 +8,7 @@
#include <paging.h>
#include <libk/serial_stdio.h>
#include <libk/stdio.h>
+#include <panic.h>
const char* const exception_name[] = {
"Divide-by-zero Error",
@@ -47,41 +48,49 @@ const char* const exception_name[] = {
void isr0_handler(void)
{
printf("%s\n", exception_name[0]);
+ panic();
}
void isr1_handler(void)
{
printf("%s\n", exception_name[1]);
+ panic();
}
void isr2_handler(void)
{
printf("%s\n", exception_name[2]);
+ panic();
}
void isr3_handler(void)
{
printf("%s\n", exception_name[3]);
+ panic();
}
void isr4_handler(void)
{
printf("%s\n", exception_name[4]);
+ panic();
}
void isr5_handler(void)
{
printf("%s\n", exception_name[5]);
+ panic();
}
void isr6_handler(void)
{
printf("%s\n", exception_name[6]);
+ panic();
}
void isr7_handler(void)
{
printf("%s\n", exception_name[7]);
+ panic();
}
void isr8_handler(uint64_t error)
@@ -93,30 +102,35 @@ void isr8_handler(uint64_t error)
void isr9_handler(void)
{
printf("%s\n", exception_name[9]);
+ panic();
}
void isr10_handler(uint64_t error)
{
printf("%s\n", exception_name[10]);
printf("error: %d\n", error);
+ panic();
}
void isr11_handler(uint64_t error)
{
printf("%s\n", exception_name[11]);
printf("error: %d\n", error);
+ panic();
}
void isr12_handler(uint64_t error)
{
printf("%s\n", exception_name[12]);
printf("error: %d\n", error);
+ panic();
}
void isr13_handler(uint64_t error)
{
printf("%s\n", exception_name[13]);
printf("error: %d\n", error);
+ panic();
}
void isr14_handler(uint64_t error)
@@ -129,90 +143,107 @@ void isr14_handler(uint64_t error)
void isr15_handler(void)
{
printf("%s\n", exception_name[15]);
+ panic();
}
void isr16_handler(void)
{
printf("%s\n", exception_name[16]);
+ panic();
}
void isr17_handler(uint64_t error)
{
printf("%s\n", exception_name[17]);
printf("error: %d\n", error);
+ panic();
}
void isr18_handler(void)
{
printf("%s\n", exception_name[18]);
+ panic();
}
void isr19_handler(void)
{
printf("%s\n", exception_name[19]);
+ panic();
}
void isr20_handler(void)
{
printf("%s\n", exception_name[20]);
+ panic();
}
void isr21_handler(uint64_t error)
{
printf("%s\n", exception_name[21]);
printf("error: %d\n", error);
+ panic();
}
void isr22_handler(void)
{
printf("%s\n", exception_name[22]);
+ panic();
}
void isr23_handler(void)
{
printf("%s\n", exception_name[23]);
+ panic();
}
void isr24_handler(void)
{
printf("%s\n", exception_name[24]);
+ panic();
}
void isr25_handler(void)
{
printf("%s\n", exception_name[25]);
+ panic();
}
void isr26_handler(void)
{
printf("%s\n", exception_name[26]);
+ panic();
}
void isr27_handler(void)
{
printf("%s\n", exception_name[27]);
+ panic();
}
void isr28_handler(void)
{
printf("%s\n", exception_name[28]);
+ panic();
}
void isr29_handler(uint64_t error)
{
printf("%s\n", exception_name[29]);
printf("error: %d\n", error);
+ panic();
}
void isr30_handler(uint64_t error)
{
printf("%s\n", exception_name[30]);
printf("error: %d\n", error);
+ panic();
}
void isr31_handler(void)
{
printf("%s\n", exception_name[31]);
+ panic();
}
void irq0_handler(void)