Continuous fuzzing with Fuzzit (#1042)
Enables automated fuzzing on Fuzzit. Runs fuzz regression tests every push and PR. Runs full fuzzing every push. Fuzzit emails if it finds crashes. Uses the existing fuzz targets: * translate-module - Fuzz valid WebAssembly modules. * reader-parse - Fuzz IR text format parsing.
This commit is contained in:
committed by
Till Schneidereit
parent
9b852fde09
commit
156938facf
@@ -97,6 +97,30 @@ jobs:
|
|||||||
RUST_BACKTRACE: 1
|
RUST_BACKTRACE: 1
|
||||||
condition: and(succeeded(), eq(variables['toolchain'], 'nightly'))
|
condition: and(succeeded(), eq(variables['toolchain'], 'nightly'))
|
||||||
|
|
||||||
|
- job: Fuzz_regression
|
||||||
|
displayName: Fuzz regression
|
||||||
|
pool:
|
||||||
|
vmImage: "ubuntu-16.04"
|
||||||
|
variables:
|
||||||
|
toolchain: nightly
|
||||||
|
steps:
|
||||||
|
- template: ci/azure-install-rust.yml
|
||||||
|
- bash: cargo install cargo-fuzz
|
||||||
|
- bash: ci/fuzzit.sh local-regression
|
||||||
|
|
||||||
|
- job: Fuzz
|
||||||
|
condition: ne(variables['Build.Reason'], 'PullRequest')
|
||||||
|
pool:
|
||||||
|
vmImage: "ubuntu-16.04"
|
||||||
|
variables:
|
||||||
|
toolchain: nightly
|
||||||
|
steps:
|
||||||
|
- template: ci/azure-install-rust.yml
|
||||||
|
- bash: cargo install cargo-fuzz
|
||||||
|
- bash: ci/fuzzit.sh fuzzing
|
||||||
|
env:
|
||||||
|
FUZZIT_API_KEY: $(FUZZIT_API_KEY)
|
||||||
|
|
||||||
- job: Build
|
- job: Build
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ into executable machine code.
|
|||||||
|
|
||||||
[](https://cranelift.readthedocs.io/en/latest/?badge=latest)
|
[](https://cranelift.readthedocs.io/en/latest/?badge=latest)
|
||||||
[](https://travis-ci.org/CraneStation/cranelift)
|
[](https://travis-ci.org/CraneStation/cranelift)
|
||||||
|
[](https://app.fuzzit.dev/orgs/CraneStation/dashboard)
|
||||||
[](https://gitter.im/CraneStation/Lobby)
|
[](https://gitter.im/CraneStation/Lobby)
|
||||||

|

|
||||||
|
|
||||||
|
|||||||
38
cranelift/ci/fuzzit.sh
Executable file
38
cranelift/ci/fuzzit.sh
Executable file
@@ -0,0 +1,38 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -xe
|
||||||
|
|
||||||
|
# Validate arguments
|
||||||
|
if [ "$#" -ne 1 ]; then
|
||||||
|
cat << EOF
|
||||||
|
Usage: $0 <type>
|
||||||
|
|
||||||
|
Types are:
|
||||||
|
local-regression - Run corpus and past crashes locally to catch regressions.
|
||||||
|
fuzzing - Submit for long run fuzzing on Fuzzit.
|
||||||
|
EOF
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Configure
|
||||||
|
set -xe
|
||||||
|
NAME=cranelift
|
||||||
|
TYPE=$1
|
||||||
|
FUZZIT_VERSION=2.4.46
|
||||||
|
|
||||||
|
# Setup
|
||||||
|
if [[ ! -f fuzzit || ! `./fuzzit --version` =~ $FUZZIT_VERSION$ ]]; then
|
||||||
|
wget -q -O fuzzit https://github.com/fuzzitdev/fuzzit/releases/download/v$FUZZIT_VERSION/fuzzit_Linux_x86_64
|
||||||
|
chmod a+x fuzzit
|
||||||
|
fi
|
||||||
|
./fuzzit --version
|
||||||
|
|
||||||
|
# Fuzz
|
||||||
|
function fuzz {
|
||||||
|
FUZZER=$1
|
||||||
|
TARGET=$2
|
||||||
|
cargo fuzz run $FUZZER -- -runs=0
|
||||||
|
./fuzzit --version
|
||||||
|
./fuzzit create job --type $TYPE $NAME/$TARGET ./fuzz/target/x86_64-unknown-linux-gnu/debug/$FUZZER
|
||||||
|
}
|
||||||
|
fuzz fuzz_translate_module translate-module
|
||||||
|
fuzz fuzz_reader_parse_test reader-parse
|
||||||
@@ -6,6 +6,7 @@ use std::str;
|
|||||||
|
|
||||||
fuzz_target!(|data: &[u8]| {
|
fuzz_target!(|data: &[u8]| {
|
||||||
if let Ok(s) = str::from_utf8(data) {
|
if let Ok(s) = str::from_utf8(data) {
|
||||||
let _ = cranelift_reader::parse_test(s, None, None);
|
let options = cranelift_reader::ParseOptions::default();
|
||||||
|
let _ = cranelift_reader::parse_test(s, options);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user