]> git.proxmox.com Git - mirror_lxc.git/blame - src/tests/oss-fuzz.sh
build: support thread-safety enforcement as option
[mirror_lxc.git] / src / tests / oss-fuzz.sh
CommitLineData
dec64820
EV
1#!/bin/bash
2
3set -ex
4
3952fb45 5export LC_CTYPE=C.UTF-8
745d6048 6
dec64820 7export CC=${CC:-clang}
dec64820 8export CXX=${CXX:-clang++}
3952fb45
CB
9clang_version="$($CC --version | sed -nr 's/.*version ([^ ]+?) .*/\1/p' | sed -r 's/-$//')"
10
11SANITIZER=${SANITIZER:-address -fsanitize-address-use-after-scope}
12flags="-O1 -fno-omit-frame-pointer -g -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize=$SANITIZER"
13
14clang_lib="/usr/lib64/clang/${clang_version}/lib/linux"
15[ -d "$clang_lib" ] || clang_lib="/usr/lib/clang/${clang_version}/lib/linux"
16
17export CFLAGS=${CFLAGS:-$flags}
18export CXXFLAGS=${CXXFLAGS:-$flags}
19export LDFLAGS=${LDFLAGS:--L${clang_lib}}
dec64820
EV
20
21export OUT=${OUT:-$(pwd)/out}
22mkdir -p $OUT
23
0196c4df
CB
24apt-get update -qq
25apt-get install --yes --no-install-recommends \
26 build-essential docbook2x doxygen git \
27 wget xz-utils systemd-coredump pkgconf
28apt-get remove --yes lxc-utils liblxc-common liblxc1 liblxc-dev
29
30# make sure we have a new enough meson version
31pip3 install meson ninja
32
b8b31ab3
CB
33# Sanitized build
34meson setup san_build \
35 -Dprefix=/usr \
36 -Db_lundef=false \
9fec9fef 37 -Dtests=false \
b8b31ab3
CB
38 -Dpam-cgroup=false \
39 -Dwerror=true \
40 -Dtools=false \
41 -Dcommands=false \
42 -Dcapabilities=false \
43 -Dapparmor=false \
44 -Dopenssl=false \
45 -Dselinux=false \
cfa85da6
CB
46 -Dseccomp=false \
47 -Db_lto=false \
48 -Db_pie=false \
0c4549a3 49 -Dthread-safety=false \
cfa85da6
CB
50 -Doss-fuzz=true
51ninja -C san_build -v
dec64820 52
e8694d9a
EV
53for fuzz_target_source in src/tests/fuzz-lxc*.c; do
54 fuzz_target_name=$(basename "$fuzz_target_source" ".c")
8f7ba7c8 55 cp "san_build/src/tests/$fuzz_target_name" "$OUT"
e8694d9a 56done
dec64820 57
8f7ba7c8
CB
58perl -lne 'if (/config_jump_table\[\]\s*=/../^}/) { /"([^"]+)"/ && print "$1=" }' src/lxc/confile.c >san_build/doc/examples/keys.conf
59[[ -s san_build/doc/examples/keys.conf ]]
593f13bf 60
8f7ba7c8
CB
61perl -lne 'if (/config_jump_table_net\[\]\s*=/../^}/) { /"([^"]+)"/ && print "lxc.net.$1=" }' src/lxc/confile.c >san_build/doc/examples/lxc-net-keys.conf
62[[ -s san_build/doc/examples/lxc-net-keys.conf ]]
593f13bf 63
8f7ba7c8 64zip -r $OUT/fuzz-lxc-config-read_seed_corpus.zip san_build/doc/examples
e8694d9a
EV
65
66mkdir fuzz-lxc-define-load_seed_corpus
8f7ba7c8 67perl -lne '/([^=]+)/ && print "printf $1= >fuzz-lxc-define-load_seed_corpus/$1"' san_build/doc/examples/{keys,lxc-net-keys}.conf | bash
e8694d9a 68zip -r $OUT/fuzz-lxc-define-load_seed_corpus.zip fuzz-lxc-define-load_seed_corpus