diff --git a/Kernel/Arch/i386/CPU.cpp b/Kernel/Arch/i386/CPU.cpp index 0ec87694a8..0edf37de65 100644 --- a/Kernel/Arch/i386/CPU.cpp +++ b/Kernel/Arch/i386/CPU.cpp @@ -53,6 +53,9 @@ #include #include +extern FlatPtr start_of_ro_after_init; +extern FlatPtr end_of_ro_after_init; + namespace Kernel { static DescriptorTablePointer s_idtr; @@ -265,6 +268,11 @@ void page_fault_handler(TrapFrame* trap) handle_crash(regs, "Bad stack on page fault", SIGSTKFLT); } + if (fault_address >= (FlatPtr)&start_of_ro_after_init && fault_address < (FlatPtr)&end_of_ro_after_init) { + dump(regs); + PANIC("Attempt to write into READONLY_AFTER_INIT section"); + } + auto response = MM.handle_page_fault(PageFault(regs.exception_code, VirtualAddress(fault_address))); if (response == PageFaultResponse::ShouldCrash || response == PageFaultResponse::OutOfMemory) {