|
|
|
@ -26,19 +26,62 @@ |
|
|
|
|
# $CFLAGS, $CXXFLAGS C and C++ compiler flags. |
|
|
|
|
# $LIB_FUZZING_ENGINE C++ compiler argument to link fuzz target against the prebuilt engine library (e.g. libFuzzer). |
|
|
|
|
|
|
|
|
|
# This sets the -coverpgk for the coverage report when the corpus is executed through go test |
|
|
|
|
coverpkg="github.com/ethereum/go-ethereum/..." |
|
|
|
|
|
|
|
|
|
function coverbuild { |
|
|
|
|
path=$1 |
|
|
|
|
function=$2 |
|
|
|
|
fuzzer=$3 |
|
|
|
|
tags="" |
|
|
|
|
|
|
|
|
|
if [[ $# -eq 4 ]]; then |
|
|
|
|
tags="-tags $4" |
|
|
|
|
fi |
|
|
|
|
cd $path |
|
|
|
|
fuzzed_package=`pwd | rev | cut -d'/' -f 1 | rev` |
|
|
|
|
cp $GOPATH/ossfuzz_coverage_runner.go ./"${function,,}"_test.go |
|
|
|
|
sed -i -e 's/FuzzFunction/'$function'/' ./"${function,,}"_test.go |
|
|
|
|
sed -i -e 's/mypackagebeingfuzzed/'$fuzzed_package'/' ./"${function,,}"_test.go |
|
|
|
|
sed -i -e 's/TestFuzzCorpus/Test'$function'Corpus/' ./"${function,,}"_test.go |
|
|
|
|
|
|
|
|
|
cat << DOG > $OUT/$fuzzer |
|
|
|
|
#/bin/sh |
|
|
|
|
|
|
|
|
|
cd $OUT/$path |
|
|
|
|
go test -run Test${function}Corpus -v $tags -coverprofile \$1 -coverpkg $coverpkg |
|
|
|
|
|
|
|
|
|
DOG |
|
|
|
|
|
|
|
|
|
chmod +x $OUT/$fuzzer |
|
|
|
|
#echo "Built script $OUT/$fuzzer" |
|
|
|
|
#cat $OUT/$fuzzer |
|
|
|
|
cd - |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function compile_fuzzer { |
|
|
|
|
path=$SRC/go-ethereum/$1 |
|
|
|
|
# Inputs: |
|
|
|
|
# $1: The package to fuzz, within go-ethereum |
|
|
|
|
# $2: The name of the fuzzing function |
|
|
|
|
# $3: The name to give to the final fuzzing-binary |
|
|
|
|
|
|
|
|
|
path=$GOPATH/src/github.com/ethereum/go-ethereum/$1 |
|
|
|
|
func=$2 |
|
|
|
|
fuzzer=$3 |
|
|
|
|
corpusfile="${path}/testdata/${fuzzer}_seed_corpus.zip" |
|
|
|
|
echo "Building $fuzzer (expecting corpus at $corpusfile)" |
|
|
|
|
|
|
|
|
|
echo "Building $fuzzer" |
|
|
|
|
|
|
|
|
|
# Do a coverage-build or a regular build |
|
|
|
|
if [[ $SANITIZER = *coverage* ]]; then |
|
|
|
|
coverbuild $path $func $fuzzer $coverpkg |
|
|
|
|
else |
|
|
|
|
(cd $path && \ |
|
|
|
|
go-fuzz -func $func -o $WORK/$fuzzer.a . && \ |
|
|
|
|
echo "First stage built OK" && \ |
|
|
|
|
$CXX $CXXFLAGS $LIB_FUZZING_ENGINE $WORK/$fuzzer.a -o $OUT/$fuzzer && \ |
|
|
|
|
echo "Second stage built ok" ) |
|
|
|
|
$CXX $CXXFLAGS $LIB_FUZZING_ENGINE $WORK/$fuzzer.a -o $OUT/$fuzzer) |
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
## Check if there exists a seed corpus file |
|
|
|
|
corpusfile="${path}/testdata/${fuzzer}_seed_corpus.zip" |
|
|
|
|
if [ -f $corpusfile ] |
|
|
|
|
then |
|
|
|
|
cp $corpusfile $OUT/ |
|
|
|
@ -46,12 +89,11 @@ function compile_fuzzer { |
|
|
|
|
fi |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
compile_fuzzer common/bitutil Fuzz fuzzBitutilCompress |
|
|
|
|
compile_fuzzer crypto/bn256 FuzzAdd fuzzBn256Add |
|
|
|
|
compile_fuzzer crypto/bn256 FuzzMul fuzzBn256Mul |
|
|
|
|
compile_fuzzer crypto/bn256 FuzzPair fuzzBn256Pair |
|
|
|
|
compile_fuzzer core/vm/runtime Fuzz fuzzVmRuntime |
|
|
|
|
compile_fuzzer crypto/blake2b Fuzz fuzzBlake2b |
|
|
|
|
compile_fuzzer tests/fuzzers/bitutil Fuzz fuzzBitutilCompress |
|
|
|
|
compile_fuzzer tests/fuzzers/bn256 FuzzAdd fuzzBn256Add |
|
|
|
|
compile_fuzzer tests/fuzzers/bn256 FuzzMul fuzzBn256Mul |
|
|
|
|
compile_fuzzer tests/fuzzers/bn256 FuzzPair fuzzBn256Pair |
|
|
|
|
compile_fuzzer tests/fuzzers/runtime Fuzz fuzzVmRuntime |
|
|
|
|
compile_fuzzer tests/fuzzers/keystore Fuzz fuzzKeystore |
|
|
|
|
compile_fuzzer tests/fuzzers/txfetcher Fuzz fuzzTxfetcher |
|
|
|
|
compile_fuzzer tests/fuzzers/rlp Fuzz fuzzRlp |
|
|
|
@ -69,6 +111,10 @@ compile_fuzzer tests/fuzzers/bls12381 FuzzPairing fuzz_pairing |
|
|
|
|
compile_fuzzer tests/fuzzers/bls12381 FuzzMapG1 fuzz_map_g1 |
|
|
|
|
compile_fuzzer tests/fuzzers/bls12381 FuzzMapG2 fuzz_map_g2 |
|
|
|
|
|
|
|
|
|
#TODO: move this to tests/fuzzers, if possible |
|
|
|
|
compile_fuzzer crypto/blake2b Fuzz fuzzBlake2b |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# This doesn't work very well @TODO |
|
|
|
|
#compile_fuzzertests/fuzzers/abi Fuzz fuzzAbi |
|
|
|
|
|
|
|
|
|