Kernel: Add MemoryManager::set_page_writable_direct()

This helper function goes directly to the page tables and makes a
virtual address writable or non-writable.
This commit is contained in:
Andreas Kling 2021-03-11 13:03:40 +01:00
parent 40f2abf7c3
commit 96fb3d4a11
Notes: sideshowbarker 2024-07-18 21:31:47 +09:00
2 changed files with 14 additions and 0 deletions

View file

@ -915,4 +915,16 @@ void MemoryManager::dump_kernel_regions()
}
}
void MemoryManager::set_page_writable_direct(VirtualAddress vaddr, bool writable)
{
ScopedSpinLock lock(s_mm_lock);
ScopedSpinLock page_lock(kernel_page_directory().get_lock());
auto* pte = ensure_pte(kernel_page_directory(), vaddr);
VERIFY(pte);
if (pte->is_writable() == writable)
return;
pte->set_writable(writable);
flush_tlb(&kernel_page_directory(), vaddr);
}
}

View file

@ -139,6 +139,8 @@ public:
PageFaultResponse handle_page_fault(const PageFault&);
void set_page_writable_direct(VirtualAddress, bool);
void protect_readonly_after_init_memory();
void unmap_memory_after_init();