From ab2da499da9cd9f833fb59e41033fbc15ccbf522 Mon Sep 17 00:00:00 2001 From: Ruslan Isaev Date: Wed, 15 Apr 2026 23:44:11 +0300 Subject: [PATCH] mm: kill current task on usermode pagefault and fix destroy_page_dir destroying kernel space mappings --- src/kernel/isr.c | 7 +++++++ src/mm/paging.c | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/kernel/isr.c b/src/kernel/isr.c index 887fdf5..444431c 100644 --- a/src/kernel/isr.c +++ b/src/kernel/isr.c @@ -101,6 +101,13 @@ void handle_page_fault(uint32_t error_code, uint32_t faulting_address) printf("ERR: 0x%X\n", error_code); + if (user) { + printf("page fault, killing task %x\n", current->pid); + task_kill(current); + asm volatile("sti"); + while (1) {} + } + asm("hlt"); } diff --git a/src/mm/paging.c b/src/mm/paging.c index 2e7de6f..9c925ca 100644 --- a/src/mm/paging.c +++ b/src/mm/paging.c @@ -169,7 +169,7 @@ void destroy_page_dir(uint32_t* page_dir_virt) { // Iterate through user-space page directory entries (PDEs 0-767). // Kernel space (768+) is shared and should not be freed. - for (int i = 0; i < 768; i++) { + for (int i = 1; i < 768; i++) { uint32_t pde = page_dir_virt[i]; // Check if the page directory entry is present