From e3eba88958605f4cee3d33ce88776e0d5ee46dae Mon Sep 17 00:00:00 2001 From: Ruslan Isaev Date: Tue, 24 Jun 2025 17:08:22 +0300 Subject: [PATCH] mm: fix page fault on process exit --- src/mm/paging.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/mm/paging.c b/src/mm/paging.c index 8535252..8c68ddd 100644 --- a/src/mm/paging.c +++ b/src/mm/paging.c @@ -26,7 +26,7 @@ uint32_t setup_tmp_pgdir(uint32_t magic, uint32_t info) } /* Address is PAGE_OFFSET plus memory size minus 4KB */ - pagedir_address = PAGE_OFFSET + (memksize * 1024) - 4096; + pagedir_address = PAGE_OFFSET + (memksize * 1024) - memksize; pagedir_address = PAGE_ALIGN(pagedir_address); kpage_dir = (uint32_t *)pagedir_address; @@ -40,9 +40,8 @@ uint32_t setup_tmp_pgdir(uint32_t magic, uint32_t info) page_table[n] = (n << PAGE_SHIFT) | PAGE_PRESENT | PAGE_RW; if(!(n % 1024)) { pd = n / 1024; - uint32_t pt_phys = (uint32_t)page_table - PAGE_OFFSET + (PAGE_SIZE * pd); - kpage_dir[pd] = pt_phys | PAGE_PRESENT | PAGE_RW;//TODO: fix, I don't think pd should have DPL3 - kpage_dir[GET_PGDIR(PAGE_OFFSET) + pd] = pt_phys | PAGE_PRESENT | PAGE_RW;//TODO: fix, I don't think pd should have DPL3 + kpage_dir[pd] = (unsigned int)(pagedir_address + (PAGE_SIZE * pd) + GDT_BASE) | PAGE_PRESENT | PAGE_RW; + kpage_dir[GET_PGDIR(PAGE_OFFSET) + pd] = (unsigned int)(pagedir_address + (PAGE_SIZE * pd) + GDT_BASE) | PAGE_PRESENT | PAGE_RW; } }