Merge cranelift/wasmtime fuzzing

This commit is contained in:
Alex Crichton
2020-02-25 11:18:23 -08:00
parent 9fe459bf38
commit 3e2cdc3ded
9 changed files with 60 additions and 71 deletions

View File

@@ -107,6 +107,16 @@ jobs:
| shuf \ | shuf \
| head -n 100 \ | head -n 100 \
| xargs cargo fuzz run differential --release --debug-assertions | xargs cargo fuzz run differential --release --debug-assertions
- run: |
find fuzz/corpus/reader_parse_test -type f \
| shuf \
| head -n 100 \
| xargs cargo fuzz run reader_parse_test --release --debug-assertions
- run: |
find fuzz/corpus/translate_module -type f \
| shuf \
| head -n 100 \
| xargs cargo fuzz run translate_module --release --debug-assertions
# Install wasm32-unknown-emscripten target, and ensure `crates/wasi-common` # Install wasm32-unknown-emscripten target, and ensure `crates/wasi-common`
# compiles to Emscripten. # compiles to Emscripten.

12
Cargo.lock generated
View File

@@ -420,6 +420,14 @@ dependencies = [
"target-lexicon", "target-lexicon",
] ]
[[package]]
name = "cranelift-reader"
version = "0.59.0"
dependencies = [
"cranelift-codegen",
"target-lexicon",
]
[[package]] [[package]]
name = "cranelift-wasm" name = "cranelift-wasm"
version = "0.59.0" version = "0.59.0"
@@ -2114,7 +2122,11 @@ name = "wasmtime-fuzz"
version = "0.12.0" version = "0.12.0"
dependencies = [ dependencies = [
"arbitrary 0.2.0", "arbitrary 0.2.0",
"cranelift-codegen",
"cranelift-reader",
"cranelift-wasm",
"libfuzzer-sys", "libfuzzer-sys",
"target-lexicon",
"wasmtime", "wasmtime",
"wasmtime-fuzzing", "wasmtime-fuzzing",
] ]

View File

@@ -14,17 +14,6 @@ jobs:
- run: find ./target/doc -maxdepth 1 -type d -name "cranelift*" | xargs -I{} cargo deadlinks --dir {} - run: find ./target/doc -maxdepth 1 -type d -name "cranelift*" | xargs -I{} cargo deadlinks --dir {}
name: Run cargo-deadlinks name: Run cargo-deadlinks
# Ensure fuzzer works by running it with a single input
- run: cargo install cargo-fuzz
if: matrix.rust == 'nightly'
- run: |
fuzz_module="ffaefab69523eb11935a9b420d58826c8ea65c4c"
cargo fuzz run fuzz_translate_module fuzz/corpus/fuzz_translate_module/$fuzz_module
env:
RUST_BACKTRACE: 1
if: matrix.rust == 'nightly'
continue-on-error: true
meta_determinist_check: meta_determinist_check:
name: Meta deterministic check name: Meta deterministic check
runs-on: ubuntu-latest runs-on: ubuntu-latest

View File

@@ -1,30 +0,0 @@
[package]
name = "clif-wasm-fuzz"
version = "0.0.1"
authors = ["foote@fastly.com"]
publish = false
edition = "2018"
[package.metadata]
cargo-fuzz = true
[dependencies]
cargo-fuzz = "*"
binaryen = { git = "https://github.com/pepyakin/binaryen-rs.git" }
libfuzzer-sys = { git = "https://github.com/rust-fuzz/libfuzzer-sys.git" }
cranelift-codegen = { path = "../codegen" }
cranelift-wasm = { path = "../wasm" }
cranelift-reader = { path = "../reader" }
target-lexicon = "0.10"
# Prevent this from interfering with workspaces
[workspace]
members = ["."]
[[bin]]
name = "fuzz_translate_module"
path = "fuzz_translate_module.rs"
[[bin]]
name = "fuzz_reader_parse_test"
path = "fuzz_reader_parse_test.rs"

View File

@@ -1,25 +0,0 @@
#![no_main]
#[macro_use]
extern crate libfuzzer_sys;
extern crate binaryen;
extern crate cranelift_codegen;
extern crate cranelift_wasm;
#[macro_use]
extern crate target_lexicon;
use cranelift_codegen::{isa, settings};
use cranelift_wasm::{translate_module, DummyEnvironment, ReturnMode};
use std::str::FromStr;
fuzz_target!(|data: &[u8]| {
let binaryen_module = binaryen::tools::translate_to_fuzz_mvp(data);
let wasm = binaryen_module.write();
let flags = settings::Flags::new(settings::builder());
let triple = triple!("x86_64");
let isa = isa::lookup(triple).unwrap().finish(flags);
let mut dummy_environ = DummyEnvironment::new(isa.frontend_config(), ReturnMode::NormalReturns, false);
translate_module(&wasm, &mut dummy_environ).unwrap();
});

View File

@@ -10,9 +10,13 @@ cargo-fuzz = true
[dependencies] [dependencies]
arbitrary = "0.2.0" arbitrary = "0.2.0"
wasmtime-fuzzing = { path = "../crates/fuzzing" } cranelift-codegen = { path = "../cranelift/codegen" }
wasmtime = { path = "../crates/api" } cranelift-reader = { path = "../cranelift/reader" }
cranelift-wasm = { path = "../cranelift/wasm" }
libfuzzer-sys = "0.2.1" libfuzzer-sys = "0.2.1"
target-lexicon = "0.10"
wasmtime = { path = "../crates/api" }
wasmtime-fuzzing = { path = "../crates/fuzzing" }
[[bin]] [[bin]]
name = "compile" name = "compile"
@@ -43,3 +47,15 @@ name = "differential"
path = "fuzz_targets/differential.rs" path = "fuzz_targets/differential.rs"
test = false test = false
doc = false doc = false
[[bin]]
name = "translate_module"
path = "fuzz_targets/translate_module.rs"
test = false
doc = false
[[bin]]
name = "reader_parse_test"
path = "fuzz_targets/reader_parse_test.rs"
test = false
doc = false

View File

@@ -1,7 +1,7 @@
#![no_main] #![no_main]
#[macro_use]
extern crate libfuzzer_sys; use libfuzzer_sys::fuzz_target;
extern crate cranelift_reader;
use std::str; use std::str;
fuzz_target!(|data: &[u8]| { fuzz_target!(|data: &[u8]| {

View File

@@ -0,0 +1,17 @@
#![no_main]
use cranelift_codegen::{isa, settings};
use cranelift_wasm::{translate_module, DummyEnvironment, ReturnMode};
use libfuzzer_sys::fuzz_target;
use std::str::FromStr;
use target_lexicon::triple;
use wasmtime_fuzzing::generators;
fuzz_target!(|data: generators::WasmOptTtf| {
let flags = settings::Flags::new(settings::builder());
let triple = triple!("x86_64");
let isa = isa::lookup(triple).unwrap().finish(flags);
let mut dummy_environ =
DummyEnvironment::new(isa.frontend_config(), ReturnMode::NormalReturns, false);
translate_module(&data.wasm, &mut dummy_environ).unwrap();
});