From db656fe46926e0e73f16418411d49be15b808da0 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Sat, 12 Nov 2022 23:45:26 +0200 Subject: [PATCH] Implement Stack Smashing Protection --- kernel/Makefile | 3 ++- kernel/kernel/ssp.c | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 kernel/kernel/ssp.c diff --git a/kernel/Makefile b/kernel/Makefile index 3b876de6..5dbdeeca 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -13,7 +13,7 @@ EXEC_PREFIX?=$(PREFIX) BOOTDIR?=$(EXEC_PREFIX)/boot INCLUDEDIR?=$(PREFIX)/include -CFLAGS:=$(CFLAGS) -ffreestanding -Wall -Wextra +CFLAGS:=$(CFLAGS) -fstack-protector -ffreestanding -Wall -Wextra CPPFLAGS:=$(CPPFLAGS) -D__is_kernel -Iinclude LDFLAGS:=$(LDFLAGS) LIBS:=$(LIBS) -nostdlib -lk -lgcc @@ -30,6 +30,7 @@ LIBS:=$(LIBS) $(KERNEL_ARCH_LIBS) KERNEL_OBJS=\ $(KERNEL_ARCH_OBJS) \ kernel/kernel.o \ +kernel/ssp.o \ OBJS=\ $(ARCHDIR)/crti.o \ diff --git a/kernel/kernel/ssp.c b/kernel/kernel/ssp.c new file mode 100644 index 00000000..02bc8763 --- /dev/null +++ b/kernel/kernel/ssp.c @@ -0,0 +1,18 @@ +#include +#include +#include + +#if UINT32_MAX == UINTPTR_MAX +#define STACK_CHK_GUARD 0xe2dee396 +#else +#define STACK_CHK_GUARD 0x595e9fbd94fda766 +#endif + +uintptr_t __stack_chk_guard = STACK_CHK_GUARD; + +__attribute__((noreturn)) +void __stack_chk_fail(void) +{ + printf("Stack smashing detected\n"); + abort(); +} \ No newline at end of file