From 71186f560129bcaa85f7b53bded9d137c08acfa2 Mon Sep 17 00:00:00 2001 From: Eggert Jung Date: Wed, 25 Feb 2026 14:52:38 +0100 Subject: [PATCH] add r/w option to map --- kernel/memory/pagetable.cc | 4 ++-- kernel/memory/pagetable.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/kernel/memory/pagetable.cc b/kernel/memory/pagetable.cc index 5cf565c..9952206 100644 --- a/kernel/memory/pagetable.cc +++ b/kernel/memory/pagetable.cc @@ -160,7 +160,7 @@ void* getFreeVirtSpace(four_lvl_paging_t* search_table, uint8_t num_pages){ } -void setMapping(uintptr_t vaddr, void* frame, four_lvl_paging_t* flpt){ +void setMapping(uintptr_t vaddr, void* frame, four_lvl_paging_t* flpt, bool write){ uint16_t l4Index = (vaddr>>39) & 0x1FF; uint16_t l3Index = (vaddr>>30) & 0x1FF; uint16_t l2Index = (vaddr>>21) & 0x1FF; @@ -195,7 +195,7 @@ void setMapping(uintptr_t vaddr, void* frame, four_lvl_paging_t* flpt){ memset(newl1, 0, 4096); lvl2->entries[l2Index] = { .present = 1, - .write = 1, + .write = write, .user = 1, .address = (uintptr_t)newl1 >> 12 }; diff --git a/kernel/memory/pagetable.h b/kernel/memory/pagetable.h index 441b77a..c32f6d2 100644 --- a/kernel/memory/pagetable.h +++ b/kernel/memory/pagetable.h @@ -50,7 +50,7 @@ typedef struct { void write_identity_map(pagetable_t* identity_table, uint64_t size); void create_basic_page_table(four_lvl_paging_t* table, pagetable_t* kernel_identity); void load_cr3(void* cr3_value); -void setMapping(uintptr_t vaddr, void* frame, four_lvl_paging_t* flpt); +void setMapping(uintptr_t vaddr, void* frame, four_lvl_paging_t* flpt, bool write=true); uintptr_t isMapped(uintptr_t vaddr, four_lvl_paging_t* flpt); void* getFreeVirtSpace(four_lvl_paging_t* search_table, uint8_t num_pages); void copy_pagetable(four_lvl_paging_t* parent_table, four_lvl_paging_t* child_table);