kernel: remove todo!() on NonfatalInternalError in page fault handler
The page fault handler for user-mode faults had a separate arms for Segv, RecursionLimitExceeded, and NonfatalInternalError from try_correcting_page_tables. The first two fell through to return Segv to the process; NonfatalInternalError called todo!() which causes a kernel panic. This is a kernel-level crash triggered by a userspace page table correction attempt that reports an internal (non-fatal) error. Fix: collapse NonfatalInternalError into the same fall-through arm as Segv and RecursionLimitExceeded. The error name says 'nonfatal' — it should not crash the kernel. The userspace process receives a segmentation fault signal instead.
This commit is contained in:
+1
-2
@@ -1028,8 +1028,7 @@ pub fn page_fault_handler(
|
||||
match context::memory::try_correcting_page_tables(faulting_page, mode, &mut token) {
|
||||
Ok(()) => return Ok(()),
|
||||
Err(PfError::Oom) => todo!("oom"),
|
||||
Err(PfError::Segv | PfError::RecursionLimitExceeded) => (),
|
||||
Err(PfError::NonfatalInternalError) => todo!(),
|
||||
Err(PfError::Segv | PfError::RecursionLimitExceeded | PfError::NonfatalInternalError) => (),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user