From fd336e8ab0561773ba7172732666d5c318b7dd4e Mon Sep 17 00:00:00 2001 From: Alwin Berger Date: Wed, 26 Feb 2025 10:52:59 +0100 Subject: [PATCH] fix wrong minia --- fuzzers/FRET/src/fuzzer.rs | 4 ++-- fuzzers/FRET/src/systemstate/mod.rs | 4 ++++ fuzzers/FRET/src/time/clock.rs | 14 ++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/fuzzers/FRET/src/fuzzer.rs b/fuzzers/FRET/src/fuzzer.rs index 078d4081ad..fead1dcd16 100644 --- a/fuzzers/FRET/src/fuzzer.rs +++ b/fuzzers/FRET/src/fuzzer.rs @@ -68,7 +68,7 @@ pub fn get_all_fn_symbol_ranges(elf: &EasyElf, range: std::ops::Range #[allow(unused)] extern "C" { static mut libafl_interrupt_offsets : [[u32; MAX_NUM_INTERRUPT]; NUM_INTERRUPT_SOURCES]; -static mut libafl_num_interrupts : [usize; NUM_INTERRUPT_SOURCES]; +static mut libafl_num_interrupts : [u64; NUM_INTERRUPT_SOURCES]; } @@ -288,7 +288,7 @@ let run_client = |state: Option<_>, mut mgr, _core_id| { let input_bytes = input.parts_by_name(&name).next().map(|x| x.1.bytes()).unwrap_or(&[]); let t = input_bytes_to_interrupt_times(input_bytes, c); for j in 0..t.len() {libafl_interrupt_offsets[i][j]=t[j];} - libafl_num_interrupts[i]=t.len(); + libafl_num_interrupts[i]=t.len() as u64; } // println!("Load: {:?}", libafl_interrupt_offsets[0..libafl_num_interrupts].to_vec()); diff --git a/fuzzers/FRET/src/systemstate/mod.rs b/fuzzers/FRET/src/systemstate/mod.rs index ce2166d4af..f61fd7d9af 100644 --- a/fuzzers/FRET/src/systemstate/mod.rs +++ b/fuzzers/FRET/src/systemstate/mod.rs @@ -204,6 +204,10 @@ impl AtomicBasicBlock { pub fn instance_eq(&self, other: &Self) -> bool { self == other && self.instance_id == other.instance_id } + + pub fn get_start(&self) -> GuestAddr { + self.start + } } diff --git a/fuzzers/FRET/src/time/clock.rs b/fuzzers/FRET/src/time/clock.rs index 9ebc3be150..e54e1430c8 100644 --- a/fuzzers/FRET/src/time/clock.rs +++ b/fuzzers/FRET/src/time/clock.rs @@ -287,6 +287,20 @@ where { writeln!(file, "{},{}", i.0, i.1).expect("Write to dump failed"); } } + + // write out the worst case trace + if hist.1 == (icount, timestamp) { + let tracename = td.with_extension("icounttrace.ron"); + let trace = state + .metadata::() + .expect("TraceData not found"); + std::fs::write( + tracename, + ron::to_string(trace) + .expect("Error serializing hashmap"), + ) + .expect("Can not dump to file"); + } } Ok(false) }