Browse Source

Add fuzzing target for AML parser

Isaac Woods 4 years ago
parent
commit
288696a7c8
3 changed files with 89 additions and 0 deletions
  1. 4 0
      aml/fuzz/.gitignore
  2. 27 0
      aml/fuzz/Cargo.toml
  3. 58 0
      aml/fuzz/fuzz_targets/fuzz_target_1.rs

+ 4 - 0
aml/fuzz/.gitignore

@@ -0,0 +1,4 @@
+
+target
+corpus
+artifacts

+ 27 - 0
aml/fuzz/Cargo.toml

@@ -0,0 +1,27 @@
+
+[package]
+name = "aml-fuzz"
+version = "0.0.0"
+authors = ["Automatically generated"]
+publish = false
+edition = "2018"
+
+[package.metadata]
+cargo-fuzz = true
+
+[dependencies]
+libfuzzer-sys = "0.3"
+simplelog = "0.8"
+
+[dependencies.aml]
+path = ".."
+
+# Prevent this from interfering with workspaces
+[workspace]
+members = ["."]
+
+[[bin]]
+name = "fuzz_target_1"
+path = "fuzz_targets/fuzz_target_1.rs"
+test = false
+doc = false

+ 58 - 0
aml/fuzz/fuzz_targets/fuzz_target_1.rs

@@ -0,0 +1,58 @@
+#![no_main]
+use libfuzzer_sys::fuzz_target;
+extern crate aml;
+
+fuzz_target!(|data: &[u8]| {
+    simplelog::SimpleLogger::init(simplelog::LevelFilter::Trace, simplelog::Config::default());
+    let mut context = aml::AmlContext::new(Box::new(Handler), false, aml::DebugVerbosity::None);
+    let _ = context.parse_table(data);
+});
+
+struct Handler;
+
+impl aml::Handler for Handler {
+    fn read_u8(&self, _address: usize) -> u8 {
+        0
+    }
+    fn read_u16(&self, _address: usize) -> u16 {
+        0
+    }
+    fn read_u32(&self, _address: usize) -> u32 {
+        0
+    }
+    fn read_u64(&self, _address: usize) -> u64 {
+        0
+    }
+
+    fn write_u8(&mut self, _address: usize, _value: u8) {}
+    fn write_u16(&mut self, _address: usize, _value: u16) {}
+    fn write_u32(&mut self, _address: usize, _value: u32) {}
+    fn write_u64(&mut self, _address: usize, _value: u64) {}
+
+    fn read_io_u8(&self, _port: u16) -> u8 {
+        0
+    }
+    fn read_io_u16(&self, _port: u16) -> u16 {
+        0
+    }
+    fn read_io_u32(&self, _port: u16) -> u32 {
+        0
+    }
+
+    fn write_io_u8(&self, _port: u16, _value: u8) {}
+    fn write_io_u16(&self, _port: u16, _value: u16) {}
+    fn write_io_u32(&self, _port: u16, _value: u32) {}
+
+    fn read_pci_u8(&self, _segment: u16, _bus: u8, _device: u8, _function: u8, _offset: u16) -> u8 {
+        0
+    }
+    fn read_pci_u16(&self, _segment: u16, _bus: u8, _device: u8, _function: u8, _offset: u16) -> u16 {
+        0
+    }
+    fn read_pci_u32(&self, _segment: u16, _bus: u8, _device: u8, _function: u8, _offset: u16) -> u32 {
+        0
+    }
+    fn write_pci_u8(&self, _segment: u16, _bus: u8, _device: u8, _function: u8, _offset: u16, _value: u8) {}
+    fn write_pci_u16(&self, _segment: u16, _bus: u8, _device: u8, _function: u8, _offset: u16, _value: u16) {}
+    fn write_pci_u32(&self, _segment: u16, _bus: u8, _device: u8, _function: u8, _offset: u16, _value: u32) {}
+}