]> git.proxmox.com Git - mirror_lxc.git/blob - src/tests/oss-fuzz.sh
oss-fuzz: make it possible to build the fuzzer without docker
[mirror_lxc.git] / src / tests / oss-fuzz.sh
1 #!/bin/bash
2
3 set -ex
4
5 export SANITIZER=${SANITIZER:-address}
6 flags="-O1 -fno-omit-frame-pointer -gline-tables-only -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION"
7 sanitizer_flags="-fsanitize=address -fsanitize-address-use-after-scope"
8 coverage_flags="-fsanitize=fuzzer-no-link"
9
10 export CC=${CC:-clang}
11 export CFLAGS=${CFLAGS:-$flags $sanitizer_flags $coverage_flags}
12
13 export CXX=${CXX:-clang++}
14 export CXXFLAGS=${CXXFLAGS:-$flags $sanitizer_flags $coverage_flags}
15
16 export OUT=${OUT:-$(pwd)/out}
17 mkdir -p $OUT
18
19 export LIB_FUZZING_ENGINE=${LIB_FUZZING_ENGINE:--fsanitize=fuzzer}
20
21 # -fsanitize=... isn't compatible with -Wl,-no-undefined
22 # https://github.com/google/sanitizers/issues/380
23 sed -i 's/-Wl,-no-undefined *\\/\\/' src/lxc/Makefile.am
24
25 # AFL++ and hoggfuzz are both incompatible with lto=thin apparently
26 sed -i '/-flto=thin/d' configure.ac
27
28 # turn off the libutil dependency
29 sed -i 's/^AC_CHECK_LIB(util/#/' configure.ac
30
31 ./autogen.sh
32 ./configure \
33 --disable-tools \
34 --disable-commands \
35 --disable-apparmor \
36 --disable-openssl \
37 --disable-selinux \
38 --disable-seccomp \
39 --disable-capabilities
40
41 make -j$(nproc)
42
43 $CC -c -o fuzz-lxc-config-read.o $CFLAGS -Isrc -Isrc/lxc src/tests/fuzz-lxc-config-read.c
44 $CXX $CXXFLAGS $LIB_FUZZING_ENGINE fuzz-lxc-config-read.o src/lxc/.libs/liblxc.a -o $OUT/fuzz-lxc-config-read
45
46 zip -r $OUT/fuzz-lxc-config-read_seed_corpus.zip doc/examples