]> git.ipfire.org Git - thirdparty/util-linux.git/blob - tools/oss-fuzz.sh
tools/config-gen: improve fuzzers
[thirdparty/util-linux.git] / tools / oss-fuzz.sh
1 #!/usr/bin/env bash
2
3 set -ex
4
5 export LC_CTYPE=C.UTF-8
6
7 export CC=${CC:-clang}
8 export CXX=${CXX:-clang++}
9 export LIB_FUZZING_ENGINE=${LIB_FUZZING_ENGINE:--fsanitize=fuzzer}
10
11 SANITIZER=${SANITIZER:-address -fsanitize-address-use-after-scope}
12 flags="-O1 -fno-omit-frame-pointer -gline-tables-only -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize=$SANITIZER -fsanitize=fuzzer-no-link"
13
14 export CFLAGS=${CFLAGS:-$flags}
15 export CXXFLAGS=${CXXFLAGS:-$flags}
16
17 export OUT=${OUT:-$(pwd)/out}
18 mkdir -p $OUT
19
20 if [[ "$SANITIZER" == undefined ]]; then
21 additional_ubsan_checks=alignment
22 UBSAN_FLAGS="-fsanitize=$additional_ubsan_checks -fno-sanitize-recover=$additional_ubsan_checks"
23 CFLAGS+=" $UBSAN_FLAGS"
24 CXXFLAGS+=" $UBSAN_FLAGS"
25 fi
26
27 ./autogen.sh
28 ./configure --disable-all-programs --enable-libuuid --enable-libfdisk --enable-last --enable-fuzzing-engine --enable-libmount --enable-libblkid
29 make -j$(nproc) V=1 check-programs
30
31 for d in "$(dirname $0)"/../tests/ts/fuzzers/test_*_fuzz_files; do
32 bd=$(basename "$d")
33 fuzzer=${bd%_files}
34 zip -jqr $OUT/${fuzzer}_seed_corpus.zip "$d"
35 done
36
37 # create seed corpus for blkid fuzzing
38 unxz -k "$(dirname $0)"/../tests/ts/blkid/images-*/*.xz
39 zip -jqrm $OUT/test_blkid_fuzz_seed_corpus.zip "$(dirname $0)"/../tests/ts/blkid/images-*/*.img
40
41 find . -maxdepth 1 -type f -executable -name "test_*_fuzz" -exec mv {} $OUT \;
42 find . -type f -name "fuzz-*.dict" -exec cp {} $OUT \;