diff --git a/Kernel/Arch/x86_64/Interrupts.cpp b/Kernel/Arch/x86_64/Interrupts.cpp index 726c535b5a..7346163493 100644 --- a/Kernel/Arch/x86_64/Interrupts.cpp +++ b/Kernel/Arch/x86_64/Interrupts.cpp @@ -177,13 +177,16 @@ void page_fault_handler(TrapFrame* trap) { clac(); - // NOTE: Once we've extracted the faulting address from CR2, - // we can re-enable interrupts. auto fault_address = read_cr2(); - sti(); auto& regs = *trap->regs; + // NOTE: Once we've extracted the faulting address from CR2, we can re-enable interrupts. + // However, we only do this *if* they were enabled when the page fault occurred. + if (regs.flags() & 0x200) { + sti(); + } + if constexpr (PAGE_FAULT_DEBUG) { u32 fault_page_directory = read_cr3(); dbgln("CPU #{} ring {} {} page fault in PD={:#x}, {}{} {}",