add r/w option to map

This commit is contained in:
2026-02-25 14:52:38 +01:00
parent b958e9461e
commit 71186f5601
2 changed files with 3 additions and 3 deletions

View File

@@ -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 l4Index = (vaddr>>39) & 0x1FF;
uint16_t l3Index = (vaddr>>30) & 0x1FF; uint16_t l3Index = (vaddr>>30) & 0x1FF;
uint16_t l2Index = (vaddr>>21) & 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); memset(newl1, 0, 4096);
lvl2->entries[l2Index] = { lvl2->entries[l2Index] = {
.present = 1, .present = 1,
.write = 1, .write = write,
.user = 1, .user = 1,
.address = (uintptr_t)newl1 >> 12 .address = (uintptr_t)newl1 >> 12
}; };

View File

@@ -50,7 +50,7 @@ typedef struct {
void write_identity_map(pagetable_t* identity_table, uint64_t size); 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 create_basic_page_table(four_lvl_paging_t* table, pagetable_t* kernel_identity);
void load_cr3(void* cr3_value); 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); uintptr_t isMapped(uintptr_t vaddr, four_lvl_paging_t* flpt);
void* getFreeVirtSpace(four_lvl_paging_t* search_table, uint8_t num_pages); 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); void copy_pagetable(four_lvl_paging_t* parent_table, four_lvl_paging_t* child_table);