Skip to content

Commit 265314f

Browse files
committed
Panic again when segements overlap
This seems like a good indicator for bugs in the mapping code. This reverts PR #423 and commit f317b0d.
1 parent 4b80d28 commit 265314f

File tree

1 file changed

+8
-21
lines changed

1 file changed

+8
-21
lines changed

src/page_table.rs

+8-21
Original file line numberDiff line numberDiff line change
@@ -97,27 +97,14 @@ pub(crate) fn map_segment(
9797
for frame in PhysFrame::range_inclusive(start_frame, end_frame) {
9898
let offset = frame - start_frame;
9999
let page = start_page + offset;
100-
match unsafe {
101-
map_page(page, frame, page_table_flags, page_table, frame_allocator)
102-
} {
103-
Ok(flusher) => flusher.flush(),
104-
Err(MapToError::PageAlreadyMapped(to)) if to == frame => {
105-
let flags = match page_table.translate(page.start_address()) {
106-
TranslateResult::Mapped { flags, .. } => flags,
107-
_ => unreachable!(),
108-
};
109-
if flags != page_table_flags {
110-
unsafe {
111-
page_table
112-
.update_flags(page, flags | page_table_flags)
113-
.unwrap()
114-
.flush()
115-
};
116-
}
117-
// nothing to do, page is already mapped to the correct frame
118-
}
119-
Err(err) => return Err(err),
120-
}
100+
unsafe { map_page(page, frame, page_table_flags, page_table, frame_allocator) }
101+
.unwrap_or_else(|err| {
102+
panic!(
103+
"failed to map segment starting at {:?}: failed to map page {:?} to frame {:?}: {:?}",
104+
start_page, page, frame, err
105+
)
106+
})
107+
.flush();
121108
}
122109

123110
if mem_size > file_size {

0 commit comments

Comments
 (0)