Skip to content

Commit adb5a7a

Browse files
committed
check if entry contains a frame
1 parent 1f59a58 commit adb5a7a

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

src/structures/paging/mapper/mod.rs

+20
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ use crate::structures::paging::{
1818
};
1919
use crate::{PhysAddr, VirtAddr};
2020

21+
use super::page_table::FrameError;
22+
2123
mod mapped_page_table;
2224
mod offset_page_table;
2325
#[cfg(feature = "instructions")]
@@ -803,6 +805,15 @@ pub enum UnmapError {
803805
InvalidFrameAddress(PhysAddr),
804806
}
805807

808+
impl From<FrameError> for UnmapError {
809+
fn from(e: FrameError) -> Self {
810+
match e {
811+
FrameError::FrameNotPresent => Self::PageNotMapped,
812+
FrameError::HugeFrame => Self::ParentEntryHugePage,
813+
}
814+
}
815+
}
816+
806817
impl From<Infallible> for UnmapError {
807818
fn from(i: Infallible) -> Self {
808819
match i {}
@@ -819,6 +830,15 @@ pub enum FlagUpdateError {
819830
ParentEntryHugePage,
820831
}
821832

833+
impl From<FrameError> for FlagUpdateError {
834+
fn from(e: FrameError) -> Self {
835+
match e {
836+
FrameError::FrameNotPresent => Self::PageNotMapped,
837+
FrameError::HugeFrame => Self::ParentEntryHugePage,
838+
}
839+
}
840+
}
841+
822842
impl From<Infallible> for FlagUpdateError {
823843
fn from(i: Infallible) -> Self {
824844
match i {}

src/structures/paging/mapper/recursive_page_table.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -305,9 +305,10 @@ impl<'a> RecursivePageTable<'a> {
305305
#[cfg(feature = "experimental")]
306306
unsafe fn next_table_fn_next_table_mut<'b, I>(
307307
_: &mut I,
308-
_: &'b mut PageTableEntry,
308+
e: &'b mut PageTableEntry,
309309
page: Page,
310-
) -> Result<&'b mut PageTable, Infallible> {
310+
) -> Result<&'b mut PageTable, FrameError> {
311+
e.frame()?;
311312
Ok(unsafe { &mut *page.start_address().as_mut_ptr() })
312313
}
313314

0 commit comments

Comments
 (0)