diff --git a/Kernel/VM/MemoryManager.cpp b/Kernel/VM/MemoryManager.cpp index fd0ff993ac..ae73156766 100644 --- a/Kernel/VM/MemoryManager.cpp +++ b/Kernel/VM/MemoryManager.cpp @@ -416,12 +416,14 @@ PageFaultResponse MemoryManager::handle_page_fault(const PageFault& fault) #endif ASSERT(fault.vaddr() != m_quickmap_addr); if (fault.type() == PageFault::Type::PageNotPresent && fault.vaddr().get() >= 0xc0000000) { + auto* current_page_directory = reinterpret_cast(cpu_cr3()); u32 page_directory_index = (fault.vaddr().get() >> 22) & 0x3ff; auto& kernel_pde = kernel_page_directory().entries()[page_directory_index]; - if (kernel_pde.is_present()) { - dbgprintf("NP(kernel): copying new kernel mapping for L%x into current page directory\n", fault.vaddr().get()); - auto* current_page_directory = reinterpret_cast(cpu_cr3()); - current_page_directory[page_directory_index].copy_from({}, kernel_pde); + auto& current_pde = current_page_directory[page_directory_index]; + + if (kernel_pde.is_present() && !current_pde.is_present()) { + dbg() << "NP(kernel): Copying new kernel mapping for " << fault.vaddr() << " into current page directory"; + current_pde.copy_from({}, kernel_pde); flush_tlb(fault.vaddr().page_base()); return PageFaultResponse::Continue; }