mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 23:27:43 +00:00
Kernel: Implement some basic stack pointer validation
VM regions can now be marked as stack regions, which is then validated on syscall, and on page fault. If a thread is caught with its stack pointer pointing into anything that's *not* a Region with its stack bit set, we'll crash the whole process with SIGSTKFLT. Userspace must now allocate custom stacks by using mmap() with the new MAP_STACK flag. This mechanism was first introduced in OpenBSD, and now we have it too, yay! :^)
This commit is contained in:
parent
197ed1bb2a
commit
794758df3a
12 changed files with 101 additions and 5 deletions
|
@ -193,6 +193,7 @@ static_assert(sizeof(PageDirectoryEntry) == 4);
|
|||
static_assert(sizeof(PageTableEntry) == 4);
|
||||
|
||||
class IRQHandler;
|
||||
struct RegisterDump;
|
||||
|
||||
void gdt_init();
|
||||
void idt_init();
|
||||
|
@ -208,6 +209,7 @@ u16 gdt_alloc_entry();
|
|||
void gdt_free_entry(u16);
|
||||
Descriptor& get_gdt_entry(u16 selector);
|
||||
void write_gdt_entry(u16 selector, Descriptor&);
|
||||
void handle_crash(RegisterDump&, const char* description, int signal);
|
||||
|
||||
[[noreturn]] static inline void hang()
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue