Skip to content
This repository has been archived by the owner on Nov 1, 2023. It is now read-only.

address clippy issues in agent #490

Merged
merged 11 commits into from
Feb 2, 2021
2 changes: 1 addition & 1 deletion src/agent/debugger/src/dbghelp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -602,7 +602,7 @@ impl DebugHelpGuard {
) -> Result<SymLineInfo> {
let mut line_info: IMAGEHLP_LINEW64 = unsafe { MaybeUninit::zeroed().assume_init() };
line_info.SizeOfStruct = size_of::<IMAGEHLP_LINEW64>() as DWORD;
let mut displacement = 0 as DWORD;
let mut displacement: DWORD = 0;
check_winapi(|| unsafe {
SymGetLineFromInlineContextW(
process_handle,
Expand Down
20 changes: 12 additions & 8 deletions src/agent/debugger/src/target.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

#![allow(clippy::single_match)]

use std::{
collections::hash_map,
fs,
Expand Down Expand Up @@ -405,14 +407,16 @@ impl Target {
bp.set_original_byte(Some(original_byte));
bp.set_id(id);
})
.or_insert(Breakpoint::new(
address,
kind,
/*enabled*/ true,
/*original_byte*/ Some(original_byte),
/*hit_count*/ 0,
id,
));
.or_insert_with(|| {
Breakpoint::new(
address,
kind,
/*enabled*/ true,
/*original_byte*/ Some(original_byte),
/*hit_count*/ 0,
id,
)
});

write_instruction_byte(self.process_handle, address, 0xcc)?;

Expand Down
10 changes: 2 additions & 8 deletions src/agent/input-tester/src/test_result/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -343,17 +343,11 @@ impl ExitStatus {
}

pub fn is_normal_exit(&self) -> bool {
match self {
ExitStatus::Code(_) => true,
_ => false,
}
matches!(self, ExitStatus::Code(_))
bmc-msft marked this conversation as resolved.
Show resolved Hide resolved
}

pub fn is_timeout(&self) -> bool {
match self {
ExitStatus::Timeout(_) => true,
_ => false,
}
matches!(self, ExitStatus::Timeout(_))
}
}

Expand Down
1 change: 1 addition & 0 deletions src/agent/input-tester/src/tester.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

#![allow(clippy::match_like_matches_macro)]
#![allow(clippy::unknown_clippy_lints)]
#![allow(clippy::single_component_path_imports)]
#![allow(clippy::option_map_or_none)]
Expand Down
30 changes: 14 additions & 16 deletions src/agent/onefuzz-agent/src/local/common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,17 +26,17 @@ pub const CHECK_FUZZER_HELP: &str = "check_fuzzer_help";
pub const TARGET_EXE: &str = "target_exe";
pub const TARGET_ENV: &str = "target_env";
pub const TARGET_OPTIONS: &str = "target_options";
pub const SUPERVISOR_EXE: &str = "supervisor_exe";
pub const SUPERVISOR_ENV: &str = "supervisor_env";
pub const SUPERVISOR_OPTIONS: &str = "supervisor_options";
// pub const SUPERVISOR_EXE: &str = "supervisor_exe";
bmc-msft marked this conversation as resolved.
Show resolved Hide resolved
// pub const SUPERVISOR_ENV: &str = "supervisor_env";
// pub const SUPERVISOR_OPTIONS: &str = "supervisor_options";
pub const GENERATOR_EXE: &str = "generator_exe";
pub const GENERATOR_ENV: &str = "generator_env";
pub const GENERATOR_OPTIONS: &str = "generator_options";

pub enum CmdType {
Target,
Generator,
Supervisor,
// Supervisor,
}

pub fn add_cmd_options(
Expand All @@ -48,7 +48,7 @@ pub fn add_cmd_options(
) -> App<'static, 'static> {
let (exe_name, env_name, arg_name) = match cmd_type {
CmdType::Target => (TARGET_EXE, TARGET_ENV, TARGET_OPTIONS),
CmdType::Supervisor => (SUPERVISOR_EXE, SUPERVISOR_ENV, SUPERVISOR_OPTIONS),
// CmdType::Supervisor => (SUPERVISOR_EXE, SUPERVISOR_ENV, SUPERVISOR_OPTIONS),
CmdType::Generator => (GENERATOR_EXE, GENERATOR_ENV, GENERATOR_OPTIONS),
};

Expand Down Expand Up @@ -78,7 +78,7 @@ pub fn add_cmd_options(
pub fn get_cmd_exe(cmd_type: CmdType, args: &clap::ArgMatches<'_>) -> Result<String> {
let name = match cmd_type {
CmdType::Target => TARGET_EXE,
CmdType::Supervisor => SUPERVISOR_EXE,
// CmdType::Supervisor => SUPERVISOR_EXE,
CmdType::Generator => GENERATOR_EXE,
};

Expand All @@ -89,7 +89,7 @@ pub fn get_cmd_exe(cmd_type: CmdType, args: &clap::ArgMatches<'_>) -> Result<Str
pub fn get_cmd_arg(cmd_type: CmdType, args: &clap::ArgMatches<'_>) -> Vec<String> {
let name = match cmd_type {
CmdType::Target => TARGET_OPTIONS,
CmdType::Supervisor => SUPERVISOR_OPTIONS,
// CmdType::Supervisor => SUPERVISOR_OPTIONS,
CmdType::Generator => GENERATOR_OPTIONS,
};

Expand All @@ -102,7 +102,7 @@ pub fn get_cmd_env(
) -> Result<HashMap<String, String>> {
let env_name = match cmd_type {
CmdType::Target => TARGET_ENV,
CmdType::Supervisor => SUPERVISOR_ENV,
// CmdType::Supervisor => SUPERVISOR_ENV,
CmdType::Generator => GENERATOR_ENV,
};

Expand Down Expand Up @@ -156,15 +156,13 @@ pub fn build_common_config(args: &ArgMatches<'_>) -> Result<CommonConfig> {

let setup_dir = if args.is_present(SETUP_DIR) {
value_t!(args, SETUP_DIR, PathBuf)?
} else if args.is_present(TARGET_EXE) {
value_t!(args, TARGET_EXE, PathBuf)?
.parent()
.map(|x| x.to_path_buf())
.unwrap_or_default()
} else {
if args.is_present(TARGET_EXE) {
value_t!(args, TARGET_EXE, PathBuf)?
.parent()
.map(|x| x.to_path_buf())
.unwrap_or_default()
} else {
PathBuf::default()
}
PathBuf::default()
};

let config = CommonConfig {
Expand Down
15 changes: 9 additions & 6 deletions src/agent/onefuzz-agent/src/tasks/fuzz/generator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -91,18 +91,21 @@ impl GeneratorTask {
}

async fn fuzzing_loop(&self, heartbeat_client: Option<TaskHeartbeatClient>) -> Result<()> {
let tester = Tester::new(
let mut tester = Tester::new(
&self.config.common.setup_dir,
&self.config.target_exe,
&self.config.target_options,
&self.config.target_env,
&self.config.target_timeout,
self.config.check_asan_log,
false,
self.config.check_debugger,
self.config.check_retry_count,
);

tester
.check_asan_log(self.config.check_asan_log)
.check_debugger(self.config.check_debugger)
.check_retry_count(self.config.check_retry_count);
if let Some(timeout) = self.config.target_timeout {
tester.timeout(timeout);
}

loop {
for corpus_dir in &self.config.readonly_inputs {
heartbeat_client.alive();
Expand Down
12 changes: 6 additions & 6 deletions src/agent/onefuzz-agent/src/tasks/report/generic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -118,18 +118,18 @@ pub struct GenericReportProcessor<'a> {

impl<'a> GenericReportProcessor<'a> {
pub fn new(config: &'a Config, heartbeat_client: Option<TaskHeartbeatClient>) -> Self {
let tester = Tester::new(
let mut tester = Tester::new(
&config.common.setup_dir,
&config.target_exe,
&config.target_options,
&config.target_env,
&config.target_timeout,
config.check_asan_log,
false,
config.check_debugger,
config.check_retry_count,
);

tester
.check_asan_log(config.check_asan_log)
.check_debugger(config.check_debugger)
.check_retry_count(config.check_retry_count);

Self {
config,
tester,
Expand Down
43 changes: 31 additions & 12 deletions src/agent/onefuzz/src/input_tester.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use anyhow::{Error, Result};
use std::{collections::HashMap, path::Path, time::Duration};
use tempfile::tempdir;

const DEFAULT_TIMEOUT_SECS: u64 = 5;
const DEFAULT_TIMEOUT: Duration = Duration::from_secs(5);
const CRASH_SITE_UNAVAILABLE: &str = "<crash site unavailable>";

pub struct Tester<'a> {
Expand Down Expand Up @@ -47,26 +47,45 @@ impl<'a> Tester<'a> {
exe_path: &'a Path,
arguments: &'a [String],
environ: &'a HashMap<String, String>,
timeout: &'a Option<u64>,
check_asan_log: bool,
check_asan_stderr: bool,
check_debugger: bool,
check_retry_count: u64,
) -> Self {
let timeout = Duration::from_secs(timeout.unwrap_or(DEFAULT_TIMEOUT_SECS));
Self {
setup_dir,
exe_path,
arguments,
environ,
timeout,
check_asan_log,
check_asan_stderr,
check_debugger,
check_retry_count,
timeout: DEFAULT_TIMEOUT,
check_asan_log: false,
check_asan_stderr: false,
check_debugger: true,
check_retry_count: 0,
}
}

pub fn timeout(&mut self, value: u64) -> &mut Self {
chkeita marked this conversation as resolved.
Show resolved Hide resolved
self.timeout = Duration::from_secs(value);
self
}

pub fn check_asan_log(&mut self, value: bool) -> &mut Self {
self.check_asan_log = value;
self
}

pub fn check_asan_stderr(&mut self, value: bool) -> &mut Self {
self.check_asan_stderr = value;
self
}

pub fn check_debugger(&mut self, value: bool) -> &mut Self {
self.check_debugger = value;
self
}

pub fn check_retry_count(&mut self, value: u64) -> &mut Self {
self.check_retry_count = value;
self
}

#[cfg(target_os = "windows")]
async fn test_input_debugger(
&self,
Expand Down
16 changes: 5 additions & 11 deletions src/agent/onefuzz/src/libfuzzer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -162,17 +162,11 @@ impl<'a> LibFuzzer<'a> {
let mut options = self.options.to_owned();
options.push("{input}".to_string());

let tester = Tester::new(
&self.setup_dir,
&self.exe,
&options,
&self.env,
&timeout,
false,
true,
false,
retry,
);
let mut tester = Tester::new(&self.setup_dir, &self.exe, &options, &self.env);
tester.check_asan_stderr(true).check_retry_count(retry);
if let Some(timeout) = timeout {
tester.timeout(timeout);
}
tester.test_input(test_input.as_ref()).await
}

Expand Down
5 changes: 4 additions & 1 deletion src/agent/onefuzz/src/machine_id.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@
// Licensed under the MIT License.

use crate::fs::{onefuzz_etc, write_file};
use anyhow::{Context, Result};
#[cfg(target_os = "linux")]
use anyhow::Context;
use anyhow::Result;
use reqwest_retry::SendRetry;
#[cfg(target_os = "linux")]
use std::path::Path;
use std::time::Duration;
use tokio::fs;
Expand Down
4 changes: 2 additions & 2 deletions src/ci/agent.sh
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,12 @@ mkdir -p artifacts/agent

cd src/agent
cargo fmt -- --check
# RUSTSEC-2019-0031: a dependency spin (pulled in from ring) is not actively maintained
# RUSTSEC-2020-0016: a dependency net2 (pulled in from tokio) is deprecated
# RUSTSEC-2020-0036: a dependency failure (pulled from proc-maps) is deprecated
cargo audit --deny warnings --deny unmaintained --deny unsound --deny yanked --ignore RUSTSEC-2019-0031 --ignore RUSTSEC-2020-0016 --ignore RUSTSEC-2020-0036
cargo audit --deny warnings --deny unmaintained --deny unsound --deny yanked --ignore RUSTSEC-2020-0016 --ignore RUSTSEC-2020-0036
cargo-license -j > data/licenses.json
cargo build --release --locked
cargo clippy --release -- -D warnings
# export RUST_LOG=trace
export RUST_BACKTRACE=full
cargo test --release --manifest-path ./onefuzz-supervisor/Cargo.toml
Expand Down