diff --git a/fuzzers/FRET/src/systemstate/target_os/freertos/extraction.rs b/fuzzers/FRET/src/systemstate/target_os/freertos/extraction.rs index f2abdc601d..6224340494 100644 --- a/fuzzers/FRET/src/systemstate/target_os/freertos/extraction.rs +++ b/fuzzers/FRET/src/systemstate/target_os/freertos/extraction.rs @@ -12,7 +12,7 @@ use super::{ }; pub mod qemu_module { -use std::borrow::Cow; +use std::{borrow::Cow, cmp::min}; use std::ops::Range; use freertos::FreeRTOSTraceMetadata; @@ -500,19 +500,16 @@ pub fn trace_reads( S: UsesInput, QT: EmulatorModuleTuple, { - if size == 0 { + if unsafe{!INPUT_MEM.contains(&addr)} || size == 0 { return; } - let input_mem = unsafe { (&raw const INPUT_MEM).as_ref().unwrap() }; - let mut buf = vec![0u8; size]; + let mut buf = vec![0u8; min(size, (unsafe{INPUT_MEM.end} - addr) as usize)]; let emulator = hooks.qemu(); unsafe { emulator.read_mem(addr, &mut buf); for (i, &byte) in buf.iter().enumerate() { let curr_addr = addr.wrapping_add(i as GuestAddr); - if input_mem.contains(&curr_addr) { - (&raw mut MEM_READ).as_mut().unwrap().push((curr_addr, byte)); - } + (&raw mut MEM_READ).as_mut().unwrap().push((curr_addr, byte)); } } }