From 0162d9cafc2c9b14fe6f319d1fbca74b26bd0b3d Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Sat, 3 Apr 2021 18:33:26 +0200 Subject: Added readonly remap of readonly elf sections --- kernel/features/mm.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'kernel/features/mm.c') diff --git a/kernel/features/mm.c b/kernel/features/mm.c index 29e07e1..67a5abf 100644 --- a/kernel/features/mm.c +++ b/kernel/features/mm.c @@ -257,6 +257,29 @@ void virtual_map(struct page_dir *dir, struct memory_range prange, u32 vaddr, u3 paging_invalidate_tlb(); } +void virtual_remap_readonly(struct page_dir *dir, struct memory_range vrange) +{ + for (u32 i = 0; i < vrange.size / PAGE_SIZE; i++) { + u32 offset = i * PAGE_SIZE; + + u32 pdi = PDI(vrange.base + offset); + union page_dir_entry *dir_entry = &dir->entries[pdi]; + if (!dir_entry->bits.present) + continue; + + struct page_table *table = + (struct page_table *)(dir_entry->bits.address * PAGE_SIZE); + + u32 pti = PTI(vrange.base + offset); + union page_table_entry *table_entry = &table->entries[pti]; + + if (table_entry->bits.present) + table_entry->bits.writable = 0; + } + + paging_invalidate_tlb(); +} + struct memory_range virtual_alloc(struct page_dir *dir, struct memory_range prange, u32 flags) { u8 user = flags & MEMORY_USER; -- cgit v1.2.3