diff --git a/src/agent/Cargo.lock b/src/agent/Cargo.lock index eec5cbc54..29ae6d3c3 100644 --- a/src/agent/Cargo.lock +++ b/src/agent/Cargo.lock @@ -2104,6 +2104,7 @@ dependencies = [ "backoff", "log", "reqwest", + "tokio", ] [[package]] diff --git a/src/agent/coverage/src/block/linux.rs b/src/agent/coverage/src/block/linux.rs index 2dc42f449..0c27814cf 100644 --- a/src/agent/coverage/src/block/linux.rs +++ b/src/agent/coverage/src/block/linux.rs @@ -261,8 +261,8 @@ pub struct ModuleImage { impl ModuleImage { pub fn new(map: MemoryMap) -> Result { if let MMapPath::Path(..) = &map.pathname { - if map.perms.contains("x") { - return Ok(ModuleImage { map }); + if map.perms.contains('x') { + Ok(ModuleImage { map }) } else { anyhow::bail!("memory mapping is not executable"); } diff --git a/src/agent/onefuzz-agent/build.rs b/src/agent/onefuzz-agent/build.rs index dad283d51..93131e17e 100644 --- a/src/agent/onefuzz-agent/build.rs +++ b/src/agent/onefuzz-agent/build.rs @@ -53,8 +53,8 @@ fn main() -> Result<(), Box> { let sha = run_cmd(&["git", "rev-parse", "HEAD"])?; let hardcode_version = env::var("ONEFUZZ_SET_VERSION"); - if hardcode_version.is_ok() { - print_values(hardcode_version.unwrap().as_ref(), &sha); + if let Ok(hardcode_version) = &hardcode_version { + print_values(hardcode_version, &sha); return Ok(()); } diff --git a/src/agent/onefuzz-agent/src/debug/libfuzzer_merge.rs b/src/agent/onefuzz-agent/src/debug/libfuzzer_merge.rs index a11fdc096..cb8e1f5ce 100644 --- a/src/agent/onefuzz-agent/src/debug/libfuzzer_merge.rs +++ b/src/agent/onefuzz-agent/src/debug/libfuzzer_merge.rs @@ -57,7 +57,7 @@ pub fn run(args: &clap::ArgMatches) -> Result<()> { let mut rt = Runtime::new()?; rt.block_on(merge_inputs( config.clone(), - vec![config.clone().inputs[0].path.clone()], + vec![config.inputs[0].path.clone()], ))?; Ok(()) diff --git a/src/agent/onefuzz-agent/src/tasks/fuzz/generator.rs b/src/agent/onefuzz-agent/src/tasks/fuzz/generator.rs index 1348cc9dd..c0c48df24 100644 --- a/src/agent/onefuzz-agent/src/tasks/fuzz/generator.rs +++ b/src/agent/onefuzz-agent/src/tasks/fuzz/generator.rs @@ -129,7 +129,7 @@ async fn generate_input( async fn start_fuzzing<'a>( config: &GeneratorConfig, corpus_dirs: Vec>, - tester: Tester<'a>, + tester: Tester<'_>, heartbeat_client: Option, ) -> Result<()> { let generator_tmp = "generator_tmp"; diff --git a/src/agent/onefuzz-agent/src/tasks/fuzz/supervisor.rs b/src/agent/onefuzz-agent/src/tasks/fuzz/supervisor.rs index 32e25306f..99757b766 100644 --- a/src/agent/onefuzz-agent/src/tasks/fuzz/supervisor.rs +++ b/src/agent/onefuzz-agent/src/tasks/fuzz/supervisor.rs @@ -270,7 +270,7 @@ mod tests { runtime_dir, PathBuf::from(afl_fuzz_exe), PathBuf::from(afl_test_binary), - fault_dir.clone(), + fault_dir, corpus_dir, &target_options, &supervisor_options, diff --git a/src/agent/onefuzz-agent/src/tasks/generic/input_poller/tests.rs b/src/agent/onefuzz-agent/src/tasks/generic/input_poller/tests.rs index 342b0a698..f80cbb6a5 100644 --- a/src/agent/onefuzz-agent/src/tasks/generic/input_poller/tests.rs +++ b/src/agent/onefuzz-agent/src/tasks/generic/input_poller/tests.rs @@ -122,8 +122,10 @@ async fn test_ready_poll() { let msg: Msg = 0; - let mut queue = TestQueue::default(); - queue.pending = vec![msg]; + let mut queue = TestQueue { + pending: vec![msg], + ..Default::default() + }; task.trigger(Event::Poll(&mut queue)).await.unwrap(); @@ -140,8 +142,9 @@ async fn test_polled_some_parse() { task.set_state(State::Polled(Some(msg))); - let mut parser = TestParser::default(); - parser.urls = vec![url.clone()]; // at index `msg` + let mut parser = TestParser { + urls: vec![url.clone()], // at index `msg` + }; task.trigger(Event::Parse(&mut parser)).await.unwrap(); @@ -155,7 +158,6 @@ async fn test_polled_none_parse() { task.set_state(State::Polled(None)); let mut parser = TestParser::default(); - parser.urls = vec![]; task.trigger(Event::Parse(&mut parser)).await.unwrap(); diff --git a/src/agent/onefuzz-agent/src/tasks/merge/generic.rs b/src/agent/onefuzz-agent/src/tasks/merge/generic.rs index f6cb56735..76f226a24 100644 --- a/src/agent/onefuzz-agent/src/tasks/merge/generic.rs +++ b/src/agent/onefuzz-agent/src/tasks/merge/generic.rs @@ -124,7 +124,7 @@ async fn try_delete_blob(input_url: Url) -> Result<()> { .await { Ok(_) => Ok(()), - Err(err) => Err(err.into()), + Err(err) => Err(err), } } diff --git a/src/agent/onefuzz-agent/src/tasks/merge/libfuzzer_merge.rs b/src/agent/onefuzz-agent/src/tasks/merge/libfuzzer_merge.rs index 510cd6094..3ab6aa023 100644 --- a/src/agent/onefuzz-agent/src/tasks/merge/libfuzzer_merge.rs +++ b/src/agent/onefuzz-agent/src/tasks/merge/libfuzzer_merge.rs @@ -176,6 +176,6 @@ async fn try_delete_blob(input_url: Url) -> Result<()> { .await { Ok(_) => Ok(()), - Err(err) => Err(err.into()), + Err(err) => Err(err), } } diff --git a/src/agent/onefuzz-agent/src/tasks/report/crash_report.rs b/src/agent/onefuzz-agent/src/tasks/report/crash_report.rs index 4129c56e1..764c2b164 100644 --- a/src/agent/onefuzz-agent/src/tasks/report/crash_report.rs +++ b/src/agent/onefuzz-agent/src/tasks/report/crash_report.rs @@ -153,7 +153,7 @@ impl CrashReport { call_stack: asan_log.call_stack().to_vec(), call_stack_sha256: asan_log.call_stack_sha256(), asan_log: Some(asan_log.text().to_string()), - scariness_score: asan_log.scariness_score().into(), + scariness_score: asan_log.scariness_score(), scariness_description: asan_log.scariness_description().to_owned(), task_id, job_id, diff --git a/src/agent/onefuzz-supervisor/build.rs b/src/agent/onefuzz-supervisor/build.rs index dad283d51..93131e17e 100644 --- a/src/agent/onefuzz-supervisor/build.rs +++ b/src/agent/onefuzz-supervisor/build.rs @@ -53,8 +53,8 @@ fn main() -> Result<(), Box> { let sha = run_cmd(&["git", "rev-parse", "HEAD"])?; let hardcode_version = env::var("ONEFUZZ_SET_VERSION"); - if hardcode_version.is_ok() { - print_values(hardcode_version.unwrap().as_ref(), &sha); + if let Ok(hardcode_version) = &hardcode_version { + print_values(hardcode_version, &sha); return Ok(()); } diff --git a/src/agent/onefuzz-supervisor/src/config.rs b/src/agent/onefuzz-supervisor/src/config.rs index a461cb474..97fb0b03e 100644 --- a/src/agent/onefuzz-supervisor/src/config.rs +++ b/src/agent/onefuzz-supervisor/src/config.rs @@ -88,7 +88,7 @@ impl StaticConfig { pub fn from_env() -> Result { let instance_id = Uuid::parse_str(&std::env::var("ONEFUZZ_INSTANCE_ID")?)?; let client_id = Uuid::parse_str(&std::env::var("ONEFUZZ_CLIENT_ID")?)?; - let client_secret = std::env::var("ONEFUZZ_CLIENT_SECRET")?.into(); + let client_secret = std::env::var("ONEFUZZ_CLIENT_SECRET")?; let tenant = std::env::var("ONEFUZZ_TENANT")?; let onefuzz_url = Url::parse(&std::env::var("ONEFUZZ_URL")?)?; let pool_name = std::env::var("ONEFUZZ_POOL")?; @@ -111,13 +111,9 @@ impl StaticConfig { None }; - let credentials = ClientCredentials::new( - client_id, - client_secret, - onefuzz_url.clone().to_string(), - tenant, - ) - .into(); + let credentials = + ClientCredentials::new(client_id, client_secret, onefuzz_url.to_string(), tenant) + .into(); Ok(Self { instance_id, @@ -240,7 +236,7 @@ impl Registration { ); delay_with_jitter(REGISTRATION_RETRY_PERIOD).await; } - Err(err) => return Err(err.into()), + Err(err) => return Err(err), } } diff --git a/src/agent/onefuzz-supervisor/src/coordinator.rs b/src/agent/onefuzz-supervisor/src/coordinator.rs index be35a13e7..e0779e862 100644 --- a/src/agent/onefuzz-supervisor/src/coordinator.rs +++ b/src/agent/onefuzz-supervisor/src/coordinator.rs @@ -254,7 +254,7 @@ impl Coordinator { Ok(response) } - fn build_request<'a>(&self, request_type: RequestType<'a>) -> Result { + fn build_request(&self, request_type: RequestType<'_>) -> Result { match request_type { RequestType::PollCommands => self.poll_commands_request(), RequestType::ClaimCommand(message_id) => self.claim_command_request(message_id), diff --git a/src/agent/onefuzz-supervisor/src/main.rs b/src/agent/onefuzz-supervisor/src/main.rs index 2ea439003..b4f92b824 100644 --- a/src/agent/onefuzz-supervisor/src/main.rs +++ b/src/agent/onefuzz-supervisor/src/main.rs @@ -62,20 +62,19 @@ fn main() -> Result<()> { Opt::Run(opt) => run(opt)?, Opt::Debug(opt) => debug::debug(opt)?, Opt::Licenses => licenses()?, - Opt::Version => version()?, + Opt::Version => version(), }; Ok(()) } -fn version() -> Result<()> { +fn version() { println!( "{} onefuzz:{} git:{}", crate_version!(), env!("ONEFUZZ_VERSION"), env!("GIT_VERSION") ); - Ok(()) } fn licenses() -> Result<()> { diff --git a/src/agent/onefuzz-supervisor/src/worker.rs b/src/agent/onefuzz-supervisor/src/worker.rs index 085381177..3f0890a68 100644 --- a/src/agent/onefuzz-supervisor/src/worker.rs +++ b/src/agent/onefuzz-supervisor/src/worker.rs @@ -38,11 +38,7 @@ impl Worker { } pub fn is_done(&self) -> bool { - if let Worker::Done(..) = self { - true - } else { - false - } + matches!(self, Worker::Done(..)) } pub async fn update( diff --git a/src/agent/onefuzz-supervisor/src/worker/tests.rs b/src/agent/onefuzz-supervisor/src/worker/tests.rs index db9dc1bc3..fbd0fdd93 100644 --- a/src/agent/onefuzz-supervisor/src/worker/tests.rs +++ b/src/agent/onefuzz-supervisor/src/worker/tests.rs @@ -22,11 +22,12 @@ impl Fixture { } fn child_running(&self) -> ChildDouble { - let mut child = ChildDouble::default(); - child.id = 123; // Not default - child.stderr = "stderr".into(); - child.stdout = "stdout".into(); - child + ChildDouble { + id: 123, + stderr: "stderr".into(), + stdout: "stdout".into(), + ..Default::default() + } } fn child_exited(&self, exit_status: ExitStatus) -> ChildDouble { diff --git a/src/agent/onefuzz/src/asan.rs b/src/agent/onefuzz/src/asan.rs index 66c1821e6..502074ec1 100644 --- a/src/agent/onefuzz/src/asan.rs +++ b/src/agent/onefuzz/src/asan.rs @@ -190,7 +190,8 @@ pub async fn check_asan_string(mut data: String) -> Result> { pub async fn check_asan_path(asan_dir: &Path) -> Result> { let mut entries = fs::read_dir(asan_dir).await?; - while let Some(file) = entries.next().await { + // there should be only up to one file in asan_dir + if let Some(file) = entries.next().await { let file = file?; let mut asan_text = fs::read_to_string(file.path()).await?; let asan = AsanLog::parse(asan_text.clone()); diff --git a/src/agent/onefuzz/src/fs.rs b/src/agent/onefuzz/src/fs.rs index 34b888362..ceb8ef876 100644 --- a/src/agent/onefuzz/src/fs.rs +++ b/src/agent/onefuzz/src/fs.rs @@ -163,7 +163,7 @@ mod tests { let mut len = 0; let mut entries = fs::read_dir(dir).await.unwrap(); - while let Some(_) = entries.next().await { + while entries.next().await.is_some() { len += 1; } diff --git a/src/agent/onefuzz/src/libfuzzer.rs b/src/agent/onefuzz/src/libfuzzer.rs index 10df4f8ba..cf4dca7a0 100644 --- a/src/agent/onefuzz/src/libfuzzer.rs +++ b/src/agent/onefuzz/src/libfuzzer.rs @@ -104,10 +104,11 @@ impl<'a> LibFuzzer<'a> { } // check if a max_time is already set - if let None = self + if self .options .iter() .find(|o| o.starts_with("-max_total_time")) + .is_none() { cmd.arg(format!("-max_total_time={}", DEFAULT_MAX_TOTAL_SECONDS)); } @@ -252,13 +253,13 @@ mod tests { #[test] fn test_libfuzzer_line_pulse() { - let line = r"#2097152 pulse cov: 11 ft: 11 corp: 6/21b lim: 4096 exec/s: 699050 rss: 562Mb".into(); + let line = r"#2097152 pulse cov: 11 ft: 11 corp: 6/21b lim: 4096 exec/s: 699050 rss: 562Mb"; let parsed = LibFuzzerLine::parse(line) .expect("parse error") .expect("no captures"); assert_eq!(parsed.iters(), 2097152); - assert_eq!(parsed.execs_sec(), 699050.0); + assert_eq!(parsed.execs_sec(), 699050.0_f64); } } diff --git a/src/agent/onefuzz/src/telemetry.rs b/src/agent/onefuzz/src/telemetry.rs index 8f7874c25..66c955808 100644 --- a/src/agent/onefuzz/src/telemetry.rs +++ b/src/agent/onefuzz/src/telemetry.rs @@ -188,8 +188,8 @@ mod global { assert_eq!(last_state, UNSET, "unexpected telemetry client state"); unsafe { - CLIENTS.instance = instance.map(|s| RwLock::new(s)); - CLIENTS.shared = shared.map(|s| RwLock::new(s)); + CLIENTS.instance = instance.map(RwLock::new); + CLIENTS.shared = shared.map(RwLock::new); } STATE.store(SET, SeqCst); diff --git a/src/agent/onefuzz/src/triage.rs b/src/agent/onefuzz/src/triage.rs index c591f3530..6dccfcdd5 100644 --- a/src/agent/onefuzz/src/triage.rs +++ b/src/agent/onefuzz/src/triage.rs @@ -167,7 +167,7 @@ impl Crash { let proc = stacktrace.trace(tid.as_raw() as u32)?; - let crashing_access = segv_access_addr(siginfo)?.map(|a| a.into()); + let crashing_access = segv_access_addr(siginfo).map(|a| a.into()); let maps = proc_maps::get_process_maps(tid.as_raw())?; @@ -331,10 +331,10 @@ fn find_mapping(addr: u64, maps: &[MapRange]) -> Option<&MapRange> { // Only 4 signals populate the `si_addr` field of `siginfo_t`. See `sigaction(2)`. // On Linux, the most reliable one is SIGSEGV, which saves the address of the invalid // memory access. -fn segv_access_addr(siginfo: Siginfo) -> Result> { +fn segv_access_addr(siginfo: Siginfo) -> Option { let is_segv = siginfo.si_signo == (SIGSEGV as i32); - let addr = if is_segv { + if is_segv { // Accessing a union, safe because we checked `si_signo`. let ptr = unsafe { siginfo.si_addr() }; @@ -343,9 +343,7 @@ fn segv_access_addr(siginfo: Siginfo) -> Result> { Some(addr) } else { None - }; - - Ok(addr) + } } const CRASH_SIGNALS: &[Signal] = &[SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGTRAP, SIGABRT]; diff --git a/src/agent/reqwest-retry/Cargo.toml b/src/agent/reqwest-retry/Cargo.toml index d9e34d231..c37c89388 100644 --- a/src/agent/reqwest-retry/Cargo.toml +++ b/src/agent/reqwest-retry/Cargo.toml @@ -10,4 +10,7 @@ anyhow = "1.0" async-trait = "0.1.36" reqwest = { version = "0.10", features = ["json", "stream"] } backoff = { version = "0.2.1", features = ["async-std"] } -log = "0.4" \ No newline at end of file +log = "0.4" + +[dev-dependencies] +tokio = { version = "0.2" } \ No newline at end of file