From b7e7a5473d9ceb21ab8ae232da602079478bb89f Mon Sep 17 00:00:00 2001 From: Kostya Serebryany Date: Fri, 30 Sep 2016 21:12:30 +0000 Subject: [PATCH] [libFuzzer] move common parts of shell scripts into a separate file llvm-svn: 282954 --- .../lib/Fuzzer/fuzzer-test-suite/build-and-test.sh | 13 ++++++++++ .../c-ares-CVE-2016-5180/build.sh | 17 +++---------- .../fuzzer-test-suite/c-ares-CVE-2016-5180/test.sh | 4 +-- llvm/lib/Fuzzer/fuzzer-test-suite/common.sh | 29 ++++++++++++++++++++++ .../fuzzer-test-suite/openssl-1.0.1f/build.sh | 18 +++----------- .../fuzzer-test-suite/openssl-1.0.2d/build.sh | 20 +++------------ .../fuzzer-test-suite/openssl-1.0.2d/test.sh | 5 +--- .../fuzzer-test-suite/re2-2014-12-09/build.sh | 15 +++-------- .../fuzzer-test-suite/re2-2014-12-09/test.sh | 5 +--- 9 files changed, 58 insertions(+), 68 deletions(-) create mode 100755 llvm/lib/Fuzzer/fuzzer-test-suite/build-and-test.sh create mode 100644 llvm/lib/Fuzzer/fuzzer-test-suite/common.sh diff --git a/llvm/lib/Fuzzer/fuzzer-test-suite/build-and-test.sh b/llvm/lib/Fuzzer/fuzzer-test-suite/build-and-test.sh new file mode 100755 index 0000000..e144fe6 --- /dev/null +++ b/llvm/lib/Fuzzer/fuzzer-test-suite/build-and-test.sh @@ -0,0 +1,13 @@ +#!/bin/bash +. $(dirname $0)/common.sh +BUILD=$SCRIPT_DIR/$1/build.sh +TEST=$SCRIPT_DIR/$1/test.sh + +[ ! -e $BUILD ] && echo "NO SUCH FILE: $BUILD" && exit 1 +[ ! -e $TEST ] && echo "NO SUCH FILE: $TEST" && exit 1 + +RUNDIR="RUNDIR-$1" +mkdir -p $RUNDIR +cd $RUNDIR +$BUILD && $TEST + diff --git a/llvm/lib/Fuzzer/fuzzer-test-suite/c-ares-CVE-2016-5180/build.sh b/llvm/lib/Fuzzer/fuzzer-test-suite/c-ares-CVE-2016-5180/build.sh index d95eba3..9c0a0e8 100755 --- a/llvm/lib/Fuzzer/fuzzer-test-suite/c-ares-CVE-2016-5180/build.sh +++ b/llvm/lib/Fuzzer/fuzzer-test-suite/c-ares-CVE-2016-5180/build.sh @@ -1,22 +1,11 @@ #!/bin/bash - -[ -e $(basename $0) ] && echo "PLEASE USE THIS SCRIPT FROM ANOTHER DIR" && exit 1 -SCRIPT_DIR=$(dirname $0) -EXECUTABLE_NAME_BASE=$(basename $SCRIPT_DIR) -LIBFUZZER_SRC=$(dirname $(dirname $SCRIPT_DIR)) - -FUZZ_CXXFLAGS="-O2 -g -fsanitize=address -fsanitize-coverage=trace-pc-guard,trace-cmp,trace-gep,trace-div" - -get() { - [ ! -e SRC ] && git clone https://github.com/c-ares/c-ares.git SRC && (cd SRC && git reset --hard 51fbb479f7948fca2ace3ff34a15ff27e796afdd) -} +. $(dirname $0)/../common.sh build_lib() { rm -rf BUILD cp -rf SRC BUILD (cd BUILD && ./buildconf && ./configure CC="clang $FUZZ_CXXFLAGS" && make -j) } - -get +get_git_revision https://github.com/c-ares/c-ares.git 51fbb479f7948fca2ace3ff34a15ff27e796afdd SRC build_lib -$LIBFUZZER_SRC/build.sh +build_libfuzzer clang++ -g $SCRIPT_DIR/target.cc -I BUILD BUILD/.libs/libcares.a libFuzzer.a $FUZZ_CXXFLAGS -o $EXECUTABLE_NAME_BASE diff --git a/llvm/lib/Fuzzer/fuzzer-test-suite/c-ares-CVE-2016-5180/test.sh b/llvm/lib/Fuzzer/fuzzer-test-suite/c-ares-CVE-2016-5180/test.sh index b40d4af..85da22d 100755 --- a/llvm/lib/Fuzzer/fuzzer-test-suite/c-ares-CVE-2016-5180/test.sh +++ b/llvm/lib/Fuzzer/fuzzer-test-suite/c-ares-CVE-2016-5180/test.sh @@ -1,7 +1,5 @@ #!/bin/bash +. $(dirname $0)/../common.sh set -x -SCRIPT_DIR=$(dirname $0) -EXECUTABLE_NAME_BASE=$(basename $SCRIPT_DIR) -CORPUS=CORPUS-$EXECUTABLE_NAME_BASE [ -e $EXECUTABLE_NAME_BASE ] && ./$EXECUTABLE_NAME_BASE -max_total_time=10 2>&1 | tee log grep -Pzo "(?s)ERROR: AddressSanitizer: heap-buffer-overflow.*WRITE of size 1.*ares_create_query.*is located 0 bytes to the right of" log diff --git a/llvm/lib/Fuzzer/fuzzer-test-suite/common.sh b/llvm/lib/Fuzzer/fuzzer-test-suite/common.sh new file mode 100644 index 0000000..7fe7ffb --- /dev/null +++ b/llvm/lib/Fuzzer/fuzzer-test-suite/common.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# Don't allow to call these scripts from their directories. +[ -e $(basename $0) ] && echo "PLEASE USE THIS SCRIPT FROM ANOTHER DIR" && exit 1 +SCRIPT_DIR=$(dirname $0) +EXECUTABLE_NAME_BASE=$(basename $SCRIPT_DIR) +LIBFUZZER_SRC=$(dirname $(dirname $SCRIPT_DIR)) +FUZZ_CXXFLAGS="-O2 -g -fsanitize=address -fsanitize-coverage=trace-pc-guard,trace-cmp,trace-gep,trace-div" +CORPUS=CORPUS-$EXECUTABLE_NAME_BASE +JOBS=8 + +get_git_revision() { + GIT_REPO="$1" + GIT_REVISION="$2" + TO_DIR="$3" + [ ! -e $TO_DIR ] && git clone $GIT_REPO $TO_DIR && (cd $TO_DIR && git reset --hard $GIT_REVISION) +} + +get_git_tag() { + GIT_REPO="$1" + GIT_TAG="$2" + TO_DIR="$3" + [ ! -e $TO_DIR ] && git clone $GIT_REPO $TO_DIR && (cd $TO_DIR && git checkout $GIT_TAG) +} + + +build_libfuzzer() { + $LIBFUZZER_SRC/build.sh +} diff --git a/llvm/lib/Fuzzer/fuzzer-test-suite/openssl-1.0.1f/build.sh b/llvm/lib/Fuzzer/fuzzer-test-suite/openssl-1.0.1f/build.sh index 69fa724..9b7f6ae 100755 --- a/llvm/lib/Fuzzer/fuzzer-test-suite/openssl-1.0.1f/build.sh +++ b/llvm/lib/Fuzzer/fuzzer-test-suite/openssl-1.0.1f/build.sh @@ -1,25 +1,13 @@ #!/bin/bash +. $(dirname $0)/../common.sh -[ -e $(basename $0) ] && echo "PLEASE USE THIS SCRIPT FROM ANOTHER DIR" && exit 1 -SCRIPT_DIR=$(dirname $0) -EXECUTABLE_NAME_BASE=$(basename $SCRIPT_DIR) -LIBFUZZER_SRC=$(dirname $(dirname $SCRIPT_DIR)) -JOBS=20 - -# FUZZ_CXXFLAGS=" -g -fsanitize=address -fsanitize-coverage=edge" -FUZZ_CXXFLAGS=" -g -fsanitize=address -fsanitize-coverage=trace-pc-guard,trace-cmp,trace-div,trace-gep" - -get() { - [ ! -e SRC ] && git clone https://github.com/openssl/openssl.git SRC && (cd SRC && git checkout OpenSSL_1_0_1f) -# [ ! -e SRC ] && wget https://www.openssl.org/source/openssl-1.0.1f.tar.gz && tar xf openssl-1.0.1f.tar.gz && mv openssl-1.0.1f SRC -} build_lib() { rm -rf BUILD cp -rf SRC BUILD (cd BUILD && ./config && make clean && make CC="clang $FUZZ_CXXFLAGS" -j $JOBS) } -get +get_git_tag https://github.com/openssl/openssl.git OpenSSL_1_0_1f SRC build_lib -$LIBFUZZER_SRC/build.sh +build_libfuzzer clang++ -g $SCRIPT_DIR/target.cc -DCERT_PATH=\"$SCRIPT_DIR/\" $FUZZ_CXXFLAGS BUILD/libssl.a BUILD/libcrypto.a libFuzzer.a -o $EXECUTABLE_NAME_BASE diff --git a/llvm/lib/Fuzzer/fuzzer-test-suite/openssl-1.0.2d/build.sh b/llvm/lib/Fuzzer/fuzzer-test-suite/openssl-1.0.2d/build.sh index e60818b..a22ea4e 100755 --- a/llvm/lib/Fuzzer/fuzzer-test-suite/openssl-1.0.2d/build.sh +++ b/llvm/lib/Fuzzer/fuzzer-test-suite/openssl-1.0.2d/build.sh @@ -1,25 +1,13 @@ #!/bin/bash +. $(dirname $0)/../common.sh -[ -e $(basename $0) ] && echo "PLEASE USE THIS SCRIPT FROM ANOTHER DIR" && exit 1 -SCRIPT_DIR=$(dirname $0) -EXECUTABLE_NAME_BASE=$(basename $SCRIPT_DIR) -LIBFUZZER_SRC=$(dirname $(dirname $SCRIPT_DIR)) -JOBS=20 - -# FUZZ_CXXFLAGS=" -g -fsanitize=address -fsanitize-coverage=edge" -FUZZ_CXXFLAGS=" -g -fsanitize=address -fsanitize-coverage=trace-pc-guard,trace-cmp,trace-div,trace-gep" - -get() { - [ ! -e SRC ] && git clone https://github.com/openssl/openssl.git SRC && (cd SRC && git checkout OpenSSL_1_0_2d) -# [ ! -e SRC ] && wget https://www.openssl.org/source/openssl-1.0.1f.tar.gz && tar xf openssl-1.0.1f.tar.gz && mv openssl-1.0.1f SRC -} build_lib() { rm -rf BUILD cp -rf SRC BUILD (cd BUILD && ./config && make clean && make CC="clang $FUZZ_CXXFLAGS" -j $JOBS) } -get +get_git_tag https://github.com/openssl/openssl.git OpenSSL_1_0_2d SRC build_lib -$LIBFUZZER_SRC/build.sh -echo clang++ -g $SCRIPT_DIR/target.cc -DCERT_PATH=\"$SCRIPT_DIR/\" $FUZZ_CXXFLAGS BUILD/libssl.a BUILD/libcrypto.a libFuzzer.a -lgcrypt -o $EXECUTABLE_NAME_BASE +build_libfuzzer +clang++ -g $SCRIPT_DIR/target.cc -DCERT_PATH=\"$SCRIPT_DIR/\" $FUZZ_CXXFLAGS BUILD/libssl.a BUILD/libcrypto.a libFuzzer.a -lgcrypt -o $EXECUTABLE_NAME_BASE diff --git a/llvm/lib/Fuzzer/fuzzer-test-suite/openssl-1.0.2d/test.sh b/llvm/lib/Fuzzer/fuzzer-test-suite/openssl-1.0.2d/test.sh index e528b04..0473c3d 100755 --- a/llvm/lib/Fuzzer/fuzzer-test-suite/openssl-1.0.2d/test.sh +++ b/llvm/lib/Fuzzer/fuzzer-test-suite/openssl-1.0.2d/test.sh @@ -1,9 +1,6 @@ #!/bin/bash set -x -SCRIPT_DIR=$(dirname $0) -EXECUTABLE_NAME_BASE=$(basename $SCRIPT_DIR) -CORPUS=CORPUS-$EXECUTABLE_NAME_BASE -JOBS=8 +. $(dirname $0)/../common.sh rm -rf $CORPUS mkdir $CORPUS [ -e $EXECUTABLE_NAME_BASE ] && ./$EXECUTABLE_NAME_BASE -artifact_prefix=$CORPUS/ -max_len=512 -jobs=$JOBS -workers=$JOBS $CORPUS diff --git a/llvm/lib/Fuzzer/fuzzer-test-suite/re2-2014-12-09/build.sh b/llvm/lib/Fuzzer/fuzzer-test-suite/re2-2014-12-09/build.sh index c2533bb..7fe0d11 100755 --- a/llvm/lib/Fuzzer/fuzzer-test-suite/re2-2014-12-09/build.sh +++ b/llvm/lib/Fuzzer/fuzzer-test-suite/re2-2014-12-09/build.sh @@ -1,22 +1,13 @@ #!/bin/bash +. $(dirname $0)/../common.sh -[ -e $(basename $0) ] && echo "PLEASE USE THIS SCRIPT FROM ANOTHER DIR" && exit 1 -SCRIPT_DIR=$(dirname $0) -EXECUTABLE_NAME_BASE=$(basename $SCRIPT_DIR) -LIBFUZZER_SRC=$(dirname $(dirname $SCRIPT_DIR)) - -FUZZ_CXXFLAGS="-O2 -g -fsanitize=address -fsanitize-coverage=trace-pc-guard,trace-cmp,trace-gep,trace-div" - -get() { - [ ! -e SRC ] && git clone https://github.com/google/re2.git SRC && (cd SRC && git reset --hard 499ef7eff7455ce9c9fae86111d4a77b6ac335de) -} build_lib() { rm -rf BUILD cp -rf SRC BUILD (cd BUILD && make clean && CXX=clang++ CXXFLAGS="$FUZZ_CXXFLAGS" make -j) } -get +get_git_revision https://github.com/google/re2.git 499ef7eff7455ce9c9fae86111d4a77b6ac335de SRC build_lib -$LIBFUZZER_SRC/build.sh +build_libfuzzer clang++ -g $SCRIPT_DIR/target.cc -I BUILD BUILD/obj/libre2.a libFuzzer.a $FUZZ_CXXFLAGS -o $EXECUTABLE_NAME_BASE diff --git a/llvm/lib/Fuzzer/fuzzer-test-suite/re2-2014-12-09/test.sh b/llvm/lib/Fuzzer/fuzzer-test-suite/re2-2014-12-09/test.sh index 3e07a95..13b811d 100755 --- a/llvm/lib/Fuzzer/fuzzer-test-suite/re2-2014-12-09/test.sh +++ b/llvm/lib/Fuzzer/fuzzer-test-suite/re2-2014-12-09/test.sh @@ -1,9 +1,6 @@ #!/bin/bash +. $(dirname $0)/../common.sh set -x -SCRIPT_DIR=$(dirname $0) -EXECUTABLE_NAME_BASE=$(basename $SCRIPT_DIR) -CORPUS=CORPUS-$EXECUTABLE_NAME_BASE -JOBS=8 rm -rf $CORPUS mkdir $CORPUS [ -e $EXECUTABLE_NAME_BASE ] && ./$EXECUTABLE_NAME_BASE -exit_on_src_pos=re2/dfa.cc:474 -exit_on_src_pos=re2/dfa.cc:474 -runs=1000000 -jobs=$JOBS -workers=$JOBS $CORPUS -- 2.7.4