| #!/bin/bash -eu |
| # Copyright 2016 Google Inc. |
| # |
| # 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. |
| # |
| ############################################################################## |
| |
| # Create a directory for instrumented dependencies. |
| TOR_DEPS=${SRC}/deps |
| mkdir -p $TOR_DEPS |
| |
| # Build libevent with proper instrumentation. |
| cd ${SRC}/libevent |
| sh autogen.sh |
| ./configure --prefix=${TOR_DEPS} --disable-openssl |
| make -j$(nproc) clean |
| make -j$(nproc) all |
| make install |
| |
| # Build OpenSSL with proper instrumentation. |
| cd ${SRC}/openssl |
| OPENSSL_CONFIGURE_FLAGS="" |
| if [[ $CFLAGS = *sanitize=memory* ]] |
| then |
| OPENSSL_CONFIGURE_FLAGS="no-asm" |
| fi |
| |
| ./config no-shared --prefix=${TOR_DEPS} \ |
| enable-tls1_3 enable-rc5 enable-md2 enable-ec_nistp_64_gcc_128 enable-ssl3 \ |
| enable-ssl3-method enable-nextprotoneg enable-weak-ssl-ciphers $CFLAGS \ |
| -fno-sanitize=alignment $OPENSSL_CONFIGURE_FLAGS |
| |
| make -j$(nproc) LDCMD="$CXX $CXXFLAGS" |
| make install |
| |
| # Build zlib with proper instrumentation, |
| cd ${SRC}/zlib |
| ./configure --prefix=${TOR_DEPS} |
| make -j$(nproc) clean |
| make -j$(nproc) all |
| make install |
| |
| # Build tor and the fuzz targets. |
| cd ${SRC}/tor |
| |
| sh autogen.sh |
| |
| # We need to run configure with leak-checking disabled, or many of the |
| # test functions will fail. |
| export ASAN_OPTIONS=detect_leaks=0 |
| |
| ./configure --disable-asciidoc --enable-oss-fuzz --disable-memory-sentinels \ |
| --with-libevent-dir=${SRC}/deps \ |
| --with-openssl-dir=${SRC}/deps \ |
| --with-zlib-dir=${SRC}/deps \ |
| --disable-gcc-hardening \ |
| LDFLAGS="-L${TOR_DEPS}/lib64" |
| |
| make clean |
| make micro-revision.i # Workaround from https://gitlab.torproject.org/tpo/core/tor/-/issues/29520#note_2749427 |
| make -j$(nproc) oss-fuzz-fuzzers |
| |
| TORLIBS="`make show-testing-libs`" |
| TORLIBS="$TORLIBS -lm -Wl,-Bstatic -lssl -lcrypto -levent -lz -L${TOR_DEPS}/lib -L${TOR_DEPS}/lib64" |
| TORLIBS="$TORLIBS -Wl,-Bdynamic" |
| |
| for fuzzer in src/test/fuzz/*.a; do |
| output="${fuzzer%.a}" |
| output="${output##*lib}" |
| ${CXX} ${CXXFLAGS} -std=c++11 $LIB_FUZZING_ENGINE ${fuzzer} ${TORLIBS} -o ${OUT}/${output} |
| |
| corpus_dir="${SRC}/tor-fuzz-corpora/${output#oss-fuzz-}" |
| if [ -d "${corpus_dir}" ]; then |
| set +x |
| zip -q -j ${OUT}/${output}_seed_corpus.zip ${corpus_dir}/* |
| set -x |
| fi |
| done |