Skip to content

Commit 0074cbc

Browse files
committed
fix page table update flags
remove wrong method 'PageTableEntry::flags_mut', modify flags through this lead to PPN being zeroed
1 parent 21e32ee commit 0074cbc

File tree

2 files changed

+3
-4
lines changed

2 files changed

+3
-4
lines changed

src/paging/page_table.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use addr::*;
22
use core::fmt::{Debug, Error, Formatter};
33
use core::ops::{Index, IndexMut};
44

5+
#[repr(C)]
56
pub struct PageTable {
67
entries: [PageTableEntry; ENTRY_COUNT],
78
}
@@ -53,6 +54,7 @@ impl Debug for PageTable {
5354
}
5455

5556
#[derive(Copy, Clone)]
57+
#[repr(C)]
5658
pub struct PageTableEntry(usize);
5759

5860
impl PageTableEntry {
@@ -79,9 +81,6 @@ impl PageTableEntry {
7981
flags |= EF::ACCESSED | EF::DIRTY;
8082
self.0 = (frame.number() << 10) | flags.bits();
8183
}
82-
pub fn flags_mut(&mut self) -> &mut PageTableFlags {
83-
unsafe { &mut *(self as *mut _ as *mut PageTableFlags) }
84-
}
8584
}
8685

8786
impl Debug for PageTableEntry {

src/paging/recursive.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ pub trait Mapper {
3030
flags: PageTableFlags,
3131
) -> Result<MapperFlush, FlagUpdateError> {
3232
self.ref_entry(page).map(|e| {
33-
*e.flags_mut() = flags;
33+
e.set(e.frame(), flags);
3434
MapperFlush::new(page)
3535
})
3636
}

0 commit comments

Comments
 (0)