Skip to content

Commit daf6df9

Browse files
committed
Fix pathological RSDT/XSDT mapping causing integer underflow
1 parent 2dfb0ce commit daf6df9

1 file changed

Lines changed: 2 additions & 1 deletion

File tree

src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,8 @@ where
148148
let entry_size = if self.rsdp_revision == 0 { 4 } else { 8 };
149149
let mut table_entries_ptr =
150150
unsafe { self.rsdt_mapping.virtual_start.as_ptr().byte_add(mem::size_of::<SdtHeader>()) }.cast::<u8>();
151-
let mut num_entries = (self.rsdt_mapping.region_length - mem::size_of::<SdtHeader>()) / entry_size;
151+
let mut num_entries =
152+
(self.rsdt_mapping.region_length.saturating_sub(mem::size_of::<SdtHeader>())) / entry_size;
152153

153154
core::iter::from_fn(move || {
154155
if num_entries > 0 {

0 commit comments

Comments
 (0)