You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
suricata/.clusterfuzzlite/build.sh

106 lines
2.7 KiB
Bash

#!/bin/bash -eu
cd $SRC/
# build dependencies statically
if [ "$SANITIZER" = "memory" ]
then
(
cd zlib
./configure --static
make -j$(nproc) clean
make -j$(nproc) all
make -j$(nproc) install
)
fi
(
tar -xvzf pcre2-10.44.tar.gz
cd pcre2-10.44
./configure --disable-shared
make -j$(nproc) clean
make -j$(nproc) all
make -j$(nproc) install
)
tar -xvzf lz4-1.10.0.tar.gz
cd lz4-1.10.0
make liblz4.a
cp lib/liblz4.a /usr/local/lib/
cp lib/lz4*.h /usr/local/include/
cd ..
tar -xvzf jansson-2.14.tar.gz
cd jansson-2.14
./configure --disable-shared
make -j$(nproc)
make install
cd ..
tar -xvzf libpcap-1.10.5.tar.gz
cd libpcap-1.10.5
./configure --disable-shared
make -j$(nproc)
make install
cd ..
cd fuzzpcap
mkdir build
cd build
cmake ..
make install
cd ../..
cd libyaml
./bootstrap
./configure --disable-shared
make -j$(nproc)
make install
cd ..
export CARGO_BUILD_TARGET="x86_64-unknown-linux-gnu"
# cf https://github.com/google/sanitizers/issues/1389
export MSAN_OPTIONS=strict_memcmp=false
#run configure with right options
if [ "$SANITIZER" = "address" ]
then
export RUSTFLAGS="$RUSTFLAGS -Cpasses=sancov-module -Cllvm-args=-sanitizer-coverage-level=4 -Cllvm-args=-sanitizer-coverage-trace-compares -Cllvm-args=-sanitizer-coverage-inline-8bit-counters -Cllvm-args=-sanitizer-coverage-pc-table -Clink-dead-code -Cllvm-args=-sanitizer-coverage-stack-depth -Ccodegen-units=1"
export RUSTFLAGS="$RUSTFLAGS -Cdebug-assertions=yes"
fi
rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu
#we did not put libhtp there before so that cifuzz does not remove it
cp -r libhtp suricata/
# build project
cd suricata
sh autogen.sh
./src/tests/fuzz/oss-fuzz-configure.sh
make -j$(nproc)
./src/suricata --list-app-layer-protos | tail -n +2 | while read i; do cp src/fuzz_applayerparserparse $OUT/fuzz_applayerparserparse""_$i; done
(
cd src
ls fuzz_* | while read i; do
cp $i $OUT/$i
# download oss-fuzz public corpuses
wget "https://storage.googleapis.com/suricata-backup.clusterfuzz-external.appspot.com/corpus/libFuzzer/suricata_$i/public.zip" --output-file=$OUT/"$i"_seed_corpus.zip || true
done
)
# dictionaries
./src/suricata --list-keywords | grep "\- " | sed 's/- //' | awk '{print "\""$0"\""}' > $OUT/fuzz_siginit.dict
echo \"SMB\" > $OUT/fuzz_applayerparserparse""_smb.dict
echo "\"FPC0\"" > $OUT/fuzz_sigpcap_aware.dict
echo "\"FPC0\"" > $OUT/fuzz_predefpcap_aware.dict
git grep tag rust | grep '"' | cut -d '"' -f2 | sort | uniq | awk 'length($0) > 2' | awk '{print "\""$0"\""}' | grep -v '\\' > generic.dict
cat generic.dict >> $OUT/fuzz_siginit.dict
cat generic.dict >> $OUT/fuzz_applayerparserparse.dict
cat generic.dict >> $OUT/fuzz_sigpcap.dict
cat generic.dict >> $OUT/fuzz_sigpcap_aware.dict