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