diff --git a/fuzzers/ecofuzz/builder.Dockerfile b/fuzzers/ecofuzz/builder.Dockerfile new file mode 100644 index 000000000..cd4cde5bd --- /dev/null +++ b/fuzzers/ecofuzz/builder.Dockerfile @@ -0,0 +1,31 @@ +# Copyright 2020 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +ARG parent_image +FROM $parent_image + +# Download and compile EcoFuzz. +# Set AFL_NO_X86 to skip flaky tests. +RUN git clone https://github.com/MoonLight-SteinsGate/EcoFuzz /EcoFuzz && \ + mv /EcoFuzz/EcoFuzz /afl && \ + cd /afl && \ + AFL_NO_X86=1 make + +# Use afl_driver.cpp from LLVM as our fuzzing library. +RUN apt-get update && \ + apt-get install wget -y && \ + wget https://raw.githubusercontent.com/llvm/llvm-project/5feb80e748924606531ba28c97fe65145c65372e/compiler-rt/lib/fuzzer/afl/afl_driver.cpp -O /afl/afl_driver.cpp && \ + clang -Wno-pointer-sign -c /afl/llvm_mode/afl-llvm-rt.o.c -I/afl && \ + clang++ -stdlib=libc++ -std=c++11 -O2 -c /afl/afl_driver.cpp && \ + ar r /libAFL.a *.o diff --git a/fuzzers/ecofuzz/fuzzer.py b/fuzzers/ecofuzz/fuzzer.py new file mode 100755 index 000000000..0de3703c7 --- /dev/null +++ b/fuzzers/ecofuzz/fuzzer.py @@ -0,0 +1,34 @@ +# Copyright 2020 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Integration code for EcoFuzz fuzzer.""" + +from fuzzers.afl import fuzzer as afl_fuzzer + + +def build(): + """Build benchmark.""" + afl_fuzzer.build() + + +def fuzz(input_corpus, output_corpus, target_binary): + """Run fuzzer.""" + afl_fuzzer.prepare_fuzz_environment(input_corpus) + + # Write AFL's output to /dev/null to avoid filling up disk by writing too + # much to log file. This is a problem in general with AFLFast but + # particularly with the lcms benchmark. + afl_fuzzer.run_afl_fuzz(input_corpus, + output_corpus, + target_binary, + hide_output=True) diff --git a/fuzzers/ecofuzz/runner.Dockerfile b/fuzzers/ecofuzz/runner.Dockerfile new file mode 100644 index 000000000..0d6cf004e --- /dev/null +++ b/fuzzers/ecofuzz/runner.Dockerfile @@ -0,0 +1,15 @@ +# Copyright 2020 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +FROM gcr.io/fuzzbench/base-image diff --git a/service/experiment-requests.yaml b/service/experiment-requests.yaml index 8325aea03..1d206372a 100644 --- a/service/experiment-requests.yaml +++ b/service/experiment-requests.yaml @@ -20,6 +20,13 @@ # Please add new experiment requests towards the top of this file. # +- experiment: 2023-02-28-ecofuzz + description: "Test EcoFuzz." + fuzzers: + - afl + - aflfast + - ecofuzz + - experiment: 2023-03-15-aflpp description: "afl++ identify regressions." trials: 10