Kernel: Enable the x86 WP bit to catch invalid memory writes in ring 0

Setting this bit will cause the CPU to generate a page fault when
writing to read-only memory, even if we're executing in the kernel.

Seemingly the only change needed to make this work was to have the
inode-backed page fault handler use a temporary mapping for writing
the read-from-disk data into the newly-allocated physical page.
This commit is contained in:
Andreas Kling 2019-12-21 16:21:13 +01:00
parent 70865e5a5d
commit ae2d72377d
Notes: sideshowbarker 2024-07-19 10:47:06 +09:00
2 changed files with 6 additions and 3 deletions

View file

@ -174,7 +174,7 @@ void MemoryManager::initialize_paging()
asm volatile("movl %%eax, %%cr3" ::"a"(kernel_page_directory().cr3()));
asm volatile(
"movl %%cr0, %%eax\n"
"orl $0x80000001, %%eax\n"
"orl $0x80010001, %%eax\n"
"movl %%eax, %%cr0\n" ::
: "%eax", "memory");