Kernel: Crash process instead of panicking on KSYMS access

Also do the same for READONLY_AFTER_INIT and UNMAP_AFTER_INIT.
This commit is contained in:
Idan Horowitz 2022-07-11 19:46:06 +03:00
parent f412e73bba
commit 6b08b18a9a

View file

@ -711,16 +711,21 @@ PageFaultResponse MemoryManager::handle_page_fault(PageFault const& fault)
return fault.vaddr() >= VirtualAddress { start } && fault.vaddr() < VirtualAddress { end };
};
if (faulted_in_range(&start_of_ro_after_init, &end_of_ro_after_init))
PANIC("Attempt to write into READONLY_AFTER_INIT section");
if (faulted_in_range(&start_of_ro_after_init, &end_of_ro_after_init)) {
dbgln("Attempt to write into READONLY_AFTER_INIT section");
return PageFaultResponse::ShouldCrash;
}
if (faulted_in_range(&start_of_unmap_after_init, &end_of_unmap_after_init)) {
auto const* kernel_symbol = symbolicate_kernel_address(fault.vaddr().get());
PANIC("Attempt to access UNMAP_AFTER_INIT section ({:p}: {})", fault.vaddr(), kernel_symbol ? kernel_symbol->name : "(Unknown)");
dbgln("Attempt to access UNMAP_AFTER_INIT section ({:p}: {})", fault.vaddr(), kernel_symbol ? kernel_symbol->name : "(Unknown)");
return PageFaultResponse::ShouldCrash;
}
if (faulted_in_range(&start_of_kernel_ksyms, &end_of_kernel_ksyms))
PANIC("Attempt to access KSYMS section");
if (faulted_in_range(&start_of_kernel_ksyms, &end_of_kernel_ksyms)) {
dbgln("Attempt to access KSYMS section");
return PageFaultResponse::ShouldCrash;
}
if (Processor::current_in_irq()) {
dbgln("CPU[{}] BUG! Page fault while handling IRQ! code={}, vaddr={}, irq level: {}",