]> git.proxmox.com Git - mirror_lxc.git/blob - src/tests/oss-fuzz.sh
tests: use busybox in lxc-test-unpriv
[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 coverage_flags="-fsanitize=fuzzer-no-link"
8
9 sanitizer_flags="-fsanitize=address -fsanitize-address-use-after-scope"
10 if [[ "$SANITIZER" == "undefined" ]]; then
11 sanitizer_flags="-fsanitize=undefined"
12 elif [[ "$SANITIZER" == "memory" ]]; then
13 sanitizer_flags="-fsanitize=memory -fsanitize-memory-track-origins"
14 fi
15
16 export CC=${CC:-clang}
17 export CFLAGS=${CFLAGS:-$flags $sanitizer_flags $coverage_flags}
18
19 export CXX=${CXX:-clang++}
20 export CXXFLAGS=${CXXFLAGS:-$flags $sanitizer_flags $coverage_flags}
21
22 export OUT=${OUT:-$(pwd)/out}
23 mkdir -p $OUT
24
25 export LIB_FUZZING_ENGINE=${LIB_FUZZING_ENGINE:--fsanitize=fuzzer}
26
27 # turn off the libutil dependency
28 sed -i 's/^AC_CHECK_LIB(util/#/' configure.ac
29
30 ./autogen.sh
31 ./configure \
32 --disable-tools \
33 --disable-commands \
34 --disable-apparmor \
35 --disable-openssl \
36 --disable-selinux \
37 --disable-seccomp \
38 --disable-capabilities \
39 --disable-no-undefined \
40 --enable-tests \
41 --enable-fuzzers
42
43 make -j$(nproc)
44
45 for fuzz_target_source in src/tests/fuzz-lxc*.c; do
46 fuzz_target_name=$(basename "$fuzz_target_source" ".c")
47 cp "src/tests/$fuzz_target_name" "$OUT"
48 done
49
50 perl -lne 'if (/config_jump_table\[\]\s*=/../^}/) { /"([^"]+)"/ && print "$1=" }' src/lxc/confile.c >doc/examples/keys.conf
51 [[ -s doc/examples/keys.conf ]]
52
53 perl -lne 'if (/config_jump_table_net\[\]\s*=/../^}/) { /"([^"]+)"/ && print "lxc.net.$1=" }' src/lxc/confile.c >doc/examples/lxc-net-keys.conf
54 [[ -s doc/examples/lxc-net-keys.conf ]]
55
56 zip -r $OUT/fuzz-lxc-config-read_seed_corpus.zip doc/examples
57
58 mkdir fuzz-lxc-define-load_seed_corpus
59 perl -lne '/([^=]+)/ && print "printf $1= >fuzz-lxc-define-load_seed_corpus/$1"' doc/examples/{keys,lxc-net-keys}.conf | bash
60 zip -r $OUT/fuzz-lxc-define-load_seed_corpus.zip fuzz-lxc-define-load_seed_corpus