From 0f0ead3011fd765537e1f0b1e7dccad9d85fc1f1 Mon Sep 17 00:00:00 2001 From: toka Date: Tue, 5 Mar 2024 19:14:36 +0100 Subject: [PATCH] value_profile_alternative_impl --- .../libafl_fuzzbench_ctx/builder.Dockerfile | 2 +- .../builder.Dockerfile | 2 +- .../builder.Dockerfile | 2 +- .../builder.Dockerfile | 51 ++++++++++++++ .../libafl_fuzzbench_vp_alter/description.md | 11 +++ fuzzers/libafl_fuzzbench_vp_alter/fuzzer.py | 67 +++++++++++++++++++ .../runner.Dockerfile | 23 +++++++ 7 files changed, 155 insertions(+), 3 deletions(-) create mode 100644 fuzzers/libafl_fuzzbench_vp_alter/builder.Dockerfile create mode 100644 fuzzers/libafl_fuzzbench_vp_alter/description.md create mode 100755 fuzzers/libafl_fuzzbench_vp_alter/fuzzer.py create mode 100644 fuzzers/libafl_fuzzbench_vp_alter/runner.Dockerfile diff --git a/fuzzers/libafl_fuzzbench_ctx/builder.Dockerfile b/fuzzers/libafl_fuzzbench_ctx/builder.Dockerfile index 2f2cec200..6453999e8 100644 --- a/fuzzers/libafl_fuzzbench_ctx/builder.Dockerfile +++ b/fuzzers/libafl_fuzzbench_ctx/builder.Dockerfile @@ -36,7 +36,7 @@ RUN apt-get update && \ # Download libafl RUN git clone https://github.com/tokatoka/libafl_fuzzbench /libafl_fuzzbench && \ cd /libafl_fuzzbench && \ - git checkout 5e5eb3fdaddf8769c367841699884946660e45a7 && \ + git checkout 387abaa75ff5875477cef3b14eed9149db83cf4c && \ git submodule update --init # Compile libafl diff --git a/fuzzers/libafl_fuzzbench_ngram4/builder.Dockerfile b/fuzzers/libafl_fuzzbench_ngram4/builder.Dockerfile index 2f2cec200..6453999e8 100644 --- a/fuzzers/libafl_fuzzbench_ngram4/builder.Dockerfile +++ b/fuzzers/libafl_fuzzbench_ngram4/builder.Dockerfile @@ -36,7 +36,7 @@ RUN apt-get update && \ # Download libafl RUN git clone https://github.com/tokatoka/libafl_fuzzbench /libafl_fuzzbench && \ cd /libafl_fuzzbench && \ - git checkout 5e5eb3fdaddf8769c367841699884946660e45a7 && \ + git checkout 387abaa75ff5875477cef3b14eed9149db83cf4c && \ git submodule update --init # Compile libafl diff --git a/fuzzers/libafl_fuzzbench_ngram8/builder.Dockerfile b/fuzzers/libafl_fuzzbench_ngram8/builder.Dockerfile index 2f2cec200..6453999e8 100644 --- a/fuzzers/libafl_fuzzbench_ngram8/builder.Dockerfile +++ b/fuzzers/libafl_fuzzbench_ngram8/builder.Dockerfile @@ -36,7 +36,7 @@ RUN apt-get update && \ # Download libafl RUN git clone https://github.com/tokatoka/libafl_fuzzbench /libafl_fuzzbench && \ cd /libafl_fuzzbench && \ - git checkout 5e5eb3fdaddf8769c367841699884946660e45a7 && \ + git checkout 387abaa75ff5875477cef3b14eed9149db83cf4c && \ git submodule update --init # Compile libafl diff --git a/fuzzers/libafl_fuzzbench_vp_alter/builder.Dockerfile b/fuzzers/libafl_fuzzbench_vp_alter/builder.Dockerfile new file mode 100644 index 000000000..6453999e8 --- /dev/null +++ b/fuzzers/libafl_fuzzbench_vp_alter/builder.Dockerfile @@ -0,0 +1,51 @@ +# 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 + +# Uninstall old Rust & Install the latest one. +RUN if which rustup; then rustup self uninstall -y; fi && \ + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > /rustup.sh && \ + sh /rustup.sh --default-toolchain nightly-2023-03-29 -y && \ + rm /rustup.sh + +# Install dependencies. +RUN apt-get update && \ + apt-get remove -y llvm-10 && \ + apt-get install -y \ + build-essential \ + llvm-11 \ + clang-12 && \ + apt-get install -y wget libstdc++5 libtool-bin automake flex bison \ + libglib2.0-dev libpixman-1-dev python3-setuptools unzip \ + apt-utils apt-transport-https ca-certificates joe curl \ + python3-dev gzip + +# Download libafl +RUN git clone https://github.com/tokatoka/libafl_fuzzbench /libafl_fuzzbench && \ + cd /libafl_fuzzbench && \ + git checkout 387abaa75ff5875477cef3b14eed9149db83cf4c && \ + git submodule update --init + +# Compile libafl +RUN cd /libafl_fuzzbench/ && unset CFLAGS && unset CXXFLAGS && \ + export CC=clang && export CXX=clang++ && \ + export LIBAFL_EDGES_MAP_SIZE=65536 && \ + PATH="/root/.cargo/bin/:$PATH" cargo build --release --features no_link_main + +# Auxiliary weak references. +RUN cd /libafl_fuzzbench && \ + clang -c stub_rt.c && \ + ar r /stub_rt.a stub_rt.o \ No newline at end of file diff --git a/fuzzers/libafl_fuzzbench_vp_alter/description.md b/fuzzers/libafl_fuzzbench_vp_alter/description.md new file mode 100644 index 000000000..ea9b947d6 --- /dev/null +++ b/fuzzers/libafl_fuzzbench_vp_alter/description.md @@ -0,0 +1,11 @@ +# libafl + +libafl fuzzer instance + - cmplog feature + - persistent mode + +Repository: [https://github.com/AFLplusplus/libafl/](https://github.com/AFLplusplus/libafl/) + +[builder.Dockerfile](builder.Dockerfile) +[fuzzer.py](fuzzer.py) +[runner.Dockerfile](runner.Dockerfile) diff --git a/fuzzers/libafl_fuzzbench_vp_alter/fuzzer.py b/fuzzers/libafl_fuzzbench_vp_alter/fuzzer.py new file mode 100755 index 000000000..1795f69be --- /dev/null +++ b/fuzzers/libafl_fuzzbench_vp_alter/fuzzer.py @@ -0,0 +1,67 @@ +# 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 a LibAFL-based fuzzer.""" + +import os +import subprocess + +from fuzzers import utils + + +def prepare_fuzz_environment(input_corpus): + """Prepare to fuzz with a LibAFL-based fuzzer.""" + os.environ['ASAN_OPTIONS'] = 'abort_on_error=1:detect_leaks=0:'\ + 'malloc_context_size=0:symbolize=0:'\ + 'allocator_may_return_null=1:'\ + 'detect_odr_violation=0:handle_segv=0:'\ + 'handle_sigbus=0:handle_abort=0:'\ + 'handle_sigfpe=0:handle_sigill=0' + os.environ['UBSAN_OPTIONS'] = 'abort_on_error=1:'\ + 'allocator_release_to_os_interval_ms=500:'\ + 'handle_abort=0:handle_segv=0:'\ + 'handle_sigbus=0:handle_sigfpe=0:'\ + 'handle_sigill=0:print_stacktrace=0:'\ + 'symbolize=0:symbolize_inline_frames=0' + # Create at least one non-empty seed to start. + utils.create_seed_file_for_empty_corpus(input_corpus) + + +def build(): # pylint: disable=too-many-branches,too-many-statements + """Build benchmark.""" + os.environ['CC'] = '/libafl_fuzzbench/target/release/value_profile_cc' + os.environ['CXX'] = '/libafl_fuzzbench/target/release/value_profile_cxx' + + os.environ['ASAN_OPTIONS'] = 'abort_on_error=0:allocator_may_return_null=1' + os.environ['UBSAN_OPTIONS'] = 'abort_on_error=0' + + cflags = ['--libafl'] + utils.append_flags('CFLAGS', cflags) + utils.append_flags('CXXFLAGS', cflags) + utils.append_flags('LDFLAGS', cflags) + + os.environ['FUZZER_LIB'] = '/stub_rt.a' + utils.build_benchmark() + + +def fuzz(input_corpus, output_corpus, target_binary): + """Run fuzzer.""" + prepare_fuzz_environment(input_corpus) + dictionary_path = utils.get_dictionary_path(target_binary) + command = [target_binary] + if dictionary_path: + command += (['-x', dictionary_path]) + command += (['-o', output_corpus, '-i', input_corpus]) + print(command) + subprocess.check_call(command, cwd=os.environ['OUT']) diff --git a/fuzzers/libafl_fuzzbench_vp_alter/runner.Dockerfile b/fuzzers/libafl_fuzzbench_vp_alter/runner.Dockerfile new file mode 100644 index 000000000..7aa1da8e4 --- /dev/null +++ b/fuzzers/libafl_fuzzbench_vp_alter/runner.Dockerfile @@ -0,0 +1,23 @@ +# 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 + +# This makes interactive docker runs painless: +ENV LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/out" +#ENV AFL_MAP_SIZE=2621440 +ENV PATH="$PATH:/out" +ENV AFL_SKIP_CPUFREQ=1 +ENV AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES=1 +ENV AFL_TESTCACHE_SIZE=2