]>
Commit | Line | Data |
---|---|---|
dec64820 EV |
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" | |
dec64820 EV |
7 | coverage_flags="-fsanitize=fuzzer-no-link" |
8 | ||
745d6048 EV |
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 | ||
dec64820 EV |
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 | # -fsanitize=... isn't compatible with -Wl,-no-undefined | |
28 | # https://github.com/google/sanitizers/issues/380 | |
29 | sed -i 's/-Wl,-no-undefined *\\/\\/' src/lxc/Makefile.am | |
30 | ||
31 | # AFL++ and hoggfuzz are both incompatible with lto=thin apparently | |
32 | sed -i '/-flto=thin/d' configure.ac | |
33 | ||
34 | # turn off the libutil dependency | |
35 | sed -i 's/^AC_CHECK_LIB(util/#/' configure.ac | |
36 | ||
37 | ./autogen.sh | |
38 | ./configure \ | |
39 | --disable-tools \ | |
40 | --disable-commands \ | |
41 | --disable-apparmor \ | |
42 | --disable-openssl \ | |
43 | --disable-selinux \ | |
44 | --disable-seccomp \ | |
45 | --disable-capabilities | |
46 | ||
47 | make -j$(nproc) | |
48 | ||
49 | $CC -c -o fuzz-lxc-config-read.o $CFLAGS -Isrc -Isrc/lxc src/tests/fuzz-lxc-config-read.c | |
50 | $CXX $CXXFLAGS $LIB_FUZZING_ENGINE fuzz-lxc-config-read.o src/lxc/.libs/liblxc.a -o $OUT/fuzz-lxc-config-read | |
51 | ||
593f13bf EV |
52 | perl -lne 'if (/config_jump_table\[\]\s*=/../^}/) { /"([^"]+)"/ && print "$1=" }' src/lxc/confile.c >doc/examples/keys.conf |
53 | [[ -s doc/examples/keys.conf ]] | |
54 | ||
55 | perl -lne 'if (/config_jump_table_net\[\]\s*=/../^}/) { /"([^"]+)"/ && print "lxc.net.$1=" }' src/lxc/confile.c >doc/examples/lxc-net-keys.conf | |
56 | [[ -s doc/examples/lxc-net-keys.conf ]] | |
57 | ||
dec64820 | 58 | zip -r $OUT/fuzz-lxc-config-read_seed_corpus.zip doc/examples |