summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile1
-rw-r--r--kernel/Makefile4
-rw-r--r--kernel/include/panic.h6
-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
7 files changed, 69 insertions, 5 deletions
diff --git a/Makefile b/Makefile
index 1eb51c9..46dbd93 100644
--- a/Makefile
+++ b/Makefile
@@ -20,6 +20,7 @@ CFLAGS += -MD -O3 -ffreestanding -nostdlib
CFLAGS += -fno-common -fno-stack-protector
CFLAGS += -fno-pie -no-pie -fno-pic
CFLAGS += -g -fsanitize=undefined
+#CFLAGS += -fstack-protector-all
LDFLAGS = -z max-page-size=4096
MAKE:=$(MAKE) -s
diff --git a/kernel/Makefile b/kernel/Makefile
index a8fd434..bf5b008 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -5,6 +5,9 @@ OBJS = \
src/boot/boot.o \
src/boot/header.o \
src/boot/multiboot2.o \
+ src/check/panic.o \
+ src/check/ssp.o \
+ src/check/ubsan.o \
src/cpu/gdt.o \
src/cpu/idt.o \
src/cpu/io.o \
@@ -32,7 +35,6 @@ OBJS = \
src/sys/syscall.o \
src/sys/userspace_asm.o \
src/sys/userspace.o \
- src/ubsan/ubsan.o \
all: kernel.bin
diff --git a/kernel/include/panic.h b/kernel/include/panic.h
new file mode 100644
index 0000000..23b02f4
--- /dev/null
+++ b/kernel/include/panic.h
@@ -0,0 +1,6 @@
+#ifndef PANIC_H
+#define PANIC_H
+
+__attribute__((noreturn)) void panic(void);
+
+#endif
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)