use crate::config::*; use serde_derive::Serialize; use serde_derive::Deserialize; use std::time::Duration; #[derive(Clone, Serialize, Deserialize)] pub struct QemuKernelConfigLoader { pub qemu_binary: Option, pub kernel: Option, pub ramfs: Option, pub debug: Option, } #[derive(Clone, Serialize, Deserialize)] pub struct QemuSnapshotConfigLoader { pub qemu_binary: Option, pub hda: Option, pub presnapshot: Option, pub snapshot_path: Option, pub debug: Option, } #[derive(Clone, Serialize, Deserialize)] pub struct ForkServerConfigLoader { pub args: Option>, pub hide_output: Option, pub input_size: Option, pub env: Option>, } #[derive(Clone, Serialize, Deserialize)] pub enum FuzzRunnerConfigLoader { QemuKernel(QemuKernelConfigLoader), QemuSnapshot(QemuSnapshotConfigLoader), } #[derive(Clone, Serialize, Deserialize)] pub struct FuzzerConfigLoader { #[serde(default = "default_write_protected_input_buffer")] pub write_protected_input_buffer: bool, #[serde(default = "default_cow_primary_size")] pub cow_primary_size: u64, #[serde(default = "default_ipt_filter")] pub ip0: IptFilter, #[serde(default = "default_ipt_filter")] pub ip1: IptFilter, #[serde(default = "default_ipt_filter")] pub ip2: IptFilter, #[serde(default = "default_ipt_filter")] pub ip3: IptFilter, pub workdir_path: Option, pub bitmap_size: Option, #[serde(default = "default_input_buffer_size")] pub input_buffer_size: usize, pub mem_limit: Option, pub time_limit: Option, pub target_binary: Option, pub seed_path: Option, pub dict: Option>>, pub snapshot_placement: Option, pub dump_python_code_for_inputs: Option, pub exit_after_first_crash: Option, } fn default_input_buffer_size() -> usize { 1 << 17 } fn default_write_protected_input_buffer() -> bool { false } fn default_cow_primary_size() -> u64 { 0 } fn default_ipt_filter() -> IptFilter { IptFilter{ a: 0, b: 0, } } #[derive(Clone, Serialize, Deserialize)] pub struct ConfigLoader { pub include_default_config_path: Option, pub runner: FuzzRunnerConfigLoader, pub fuzz: FuzzerConfigLoader, }