From ffdaf22b1d0b32e0d341bb1a9ca9fa33fa895aa0 Mon Sep 17 00:00:00 2001 From: Alwin Berger Date: Tue, 22 Feb 2022 00:09:15 +0100 Subject: [PATCH] fix byte input reading --- fuzzers/wcet_qemu_sys/src/bin/showmap.rs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/fuzzers/wcet_qemu_sys/src/bin/showmap.rs b/fuzzers/wcet_qemu_sys/src/bin/showmap.rs index 39b23c933f..d005e471b0 100644 --- a/fuzzers/wcet_qemu_sys/src/bin/showmap.rs +++ b/fuzzers/wcet_qemu_sys/src/bin/showmap.rs @@ -1,5 +1,6 @@ //! A singlethreaded QEMU fuzzer that can auto-restart. +use std::io::Read; use wcet_qemu_sys::system_trace::QemuSysStateObserver; use wcet_qemu_sys::worst::QemuHashMapObserver; use wcet_qemu_sys::{ @@ -140,7 +141,13 @@ pub fn main() { out_dir.push("queue"); let seed = match res.value_of("single") { - Some(s) => Left(s.to_string()), + Some(s) => if s=="-" { + let mut buf = Vec::::new(); + std::io::stdin().read_to_end(&mut buf).expect("Could not read Stdin"); + Left(buf) + } else { + Left(s.as_bytes().to_owned()) + }, None => { let in_dir = PathBuf::from(res.value_of("in").unwrap().to_string()); if !in_dir.is_dir() { @@ -150,6 +157,7 @@ pub fn main() { Right(in_dir) }, }; + println!("{:?}",seed); let kernel = PathBuf::from(res.value_of("k").unwrap().to_string()); let edges = match res.value_of("edges") { @@ -178,7 +186,7 @@ fn virt2phys(vaddr : u64, tab : &goblin::elf::Elf) -> u64 { /// The actual fuzzer fn fuzz( - seed: Either, + seed: Either,PathBuf>, kernel: PathBuf, dump_edges: Option, snapshot: PathBuf, @@ -316,7 +324,7 @@ fn fuzz( ExitKind::Ok }; //======= Set System-State watchpoints - let system_state_filter = QemuInstrumentationFilter::AllowList(vec![svh..svh+1]); + let system_state_filter = QemuInstrumentationFilter::AllowList(vec![svh..svh+1,systick_handler..systick_handler+1,svc_handle..svc_handle+1]); //======= Construct the executor, including the Helpers. The edges_observer still contains the ref to EDGES_MAP let mut executor = QemuExecutor::new( @@ -351,7 +359,7 @@ fn fuzz( }, Left(s) => { - fuzzer.evaluate_input(&mut state, &mut executor, &mut mgr, BytesInput::new(s.as_bytes().to_vec())).expect("Evaluation failed"); + fuzzer.evaluate_input(&mut state, &mut executor, &mut mgr, BytesInput::new(s)).expect("Evaluation failed"); } } // let firstinput = match seed.clone().is_dir() {