diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/Makefile | 4 | ||||
| -rw-r--r-- | kernel/include/panic.h | 6 | ||||
| -rw-r--r-- | kernel/src/check/panic.c | 12 | ||||
| -rw-r--r-- | kernel/src/check/ssp.c | 14 | ||||
| -rw-r--r-- | kernel/src/check/ubsan.c (renamed from kernel/src/ubsan/ubsan.c) | 6 | ||||
| -rw-r--r-- | kernel/src/cpu/irq.c | 31 |
6 files changed, 68 insertions, 5 deletions
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) |
