From f4878b30fcdca788a5683520e6052dfaada169da Mon Sep 17 00:00:00 2001 From: Abhishek Arya Date: Wed, 8 Apr 2020 14:24:34 -0700 Subject: [PATCH] Add check_build for Honggfuzz targets, enable in travis. (#3596) --- infra/base-images/base-runner/bad_build_check | 10 +++++++++- infra/base-images/base-runner/test_all | 3 --- infra/helper.py | 3 ++- infra/travis/travis_build.py | 4 +--- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/infra/base-images/base-runner/bad_build_check b/infra/base-images/base-runner/bad_build_check index c3fa68c01..84d6feb68 100755 --- a/infra/base-images/base-runner/bad_build_check +++ b/infra/base-images/base-runner/bad_build_check @@ -60,7 +60,7 @@ then fi -# Verify that the given fuzz target is corectly built to run with a particular +# Verify that the given fuzz target is correctly built to run with a particular # engine. function check_engine { local FUZZER=$1 @@ -98,6 +98,14 @@ function check_engine { cat $FUZZER_OUTPUT return 1 fi + elif [[ "$FUZZING_ENGINE" == honggfuzz ]]; then + timeout --preserve-status -s INT 20s run_fuzzer $FUZZER_NAME &>$FUZZER_OUTPUT + CHECK_PASSED=$(egrep "^Sz:[0-9]+ Tm:[0-9]+" -c $FUZZER_OUTPUT) + if (( $CHECK_PASSED == 0 )); then + echo "BAD BUILD: fuzzing $FUZZER with honggfuzz failed." + cat $FUZZER_OUTPUT + return 1 + fi elif [[ "$FUZZING_ENGINE" == dataflow ]]; then $FUZZER &> $FUZZER_OUTPUT local NUMBER_OF_FUNCTIONS=$(grep -Po "INFO:\s+\K[[:digit:]]+(?=\s+instrumented function.*)" $FUZZER_OUTPUT) diff --git a/infra/base-images/base-runner/test_all b/infra/base-images/base-runner/test_all index 1cc45ca65..3a38e6289 100755 --- a/infra/base-images/base-runner/test_all +++ b/infra/base-images/base-runner/test_all @@ -60,9 +60,6 @@ for FUZZER_BINARY in $(find $TMP_FUZZER_DIR -maxdepth 1 -executable -type f); do if [[ "$FUZZER" == afl-* ]]; then continue fi - if [[ "$FUZZER" == honggfuzz ]]; then - continue - fi echo "INFO: performing bad build checks for $FUZZER_BINARY." diff --git a/infra/helper.py b/infra/helper.py index bf3158295..1d512e139 100755 --- a/infra/helper.py +++ b/infra/helper.py @@ -104,7 +104,8 @@ def main(): # pylint: disable=too-many-branches,too-many-return-statements,too- check_build_parser = subparsers.add_parser( 'check_build', help='Checks that fuzzers execute without errors.') _add_architecture_args(check_build_parser) - _add_engine_args(check_build_parser, choices=['libfuzzer', 'afl', 'dataflow']) + _add_engine_args(check_build_parser, + choices=['libfuzzer', 'afl', 'honggfuzz', 'dataflow']) _add_sanitizer_args(check_build_parser, choices=['address', 'memory', 'undefined', 'dataflow']) _add_environment_args(check_build_parser) diff --git a/infra/travis/travis_build.py b/infra/travis/travis_build.py index 884c5d0af..f62b12772 100755 --- a/infra/travis/travis_build.py +++ b/infra/travis/travis_build.py @@ -126,9 +126,7 @@ def build_project(project): print('Building project', project) build_fuzzers(project, engine, sanitizer, architecture) - # TODO(https://github.com/google/oss-fuzz/issues/3592): Re-enable after - # Honggfuzz is supported in check_build. - if engine not in ['none', 'honggfuzz']: + if engine != 'none': check_build(project, engine, sanitizer, architecture)