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