# cc style options, so we can just set ADDITIONAL_LDFLAGS
# to ensure the coverage build is done, despite waf splitting
# the compile and link phases.
- ADDITIONAL_LDFLAGS="$COVERAGE_FLAGS"
+ ADDITIONAL_LDFLAGS="${ADDITIONAL_LDFLAGS:-} $COVERAGE_FLAGS"
export ADDITIONAL_LDFLAGS
SANITIZER_ARG=''
cp $x $OUT/
bin=`basename $x`
- # Change any RPATH to RUNPATH.
+ # Changing RPATH (not RUNPATH, but we can't tell here which was
+ # set) is critical, otherwise libraries used by libraries won't be
+ # found on the oss-fuzz target host. Sadly this is only possible
+ # with clang or ld.bfd on Ubuntu 16.04 (this script is only run on
+ # that).
#
- # We use ld.bfd for the coverage builds, rather than the faster ld.gold.
+ # chrpath --convert only allows RPATH to be changed to RUNPATH,
+ # not the other way around, and we really don't want RUNPATH.
#
- # On Ubuntu 16.04, used for the oss-fuzz build, when linking with
- # ld.bfd the binaries get a RPATH, but builds in Ubuntu 18.04
- # ld.bfd and those using ld.gold get a RUNPATH.
- #
- # Just convert them all to RUNPATH to make the check_build.sh test
- # easier.
- chrpath -c $OUT/$bin
- # Change RUNPATH so that the copied libraries are found on the
- # runner
+ # This means the copied libraries are found on the runner
chrpath -r '$ORIGIN/lib' $OUT/$bin
# Truncate the original binary to save space
continue
fi
# Confirm that the chrpath was reset to lib/ in the same directory
- # as the binary
- chrpath -l $bin | grep 'RUNPATH=$ORIGIN/lib'
+ # as the binary. RPATH (not RUNPATH) is critical, otherwise
+ # libraries used by libraries won't be found on the oss-fuzz
+ # target host, but is only possible with clang or ld.bfd on Ubuntu
+ # 16.04 (this script is only run on that).
+ chrpath -l $bin | grep 'RPATH=$ORIGIN/lib'
# Confirm that we link to at least some libraries in this
# directory (shows that the libraries were found and copied).
ldd $bin | grep "$OUT/lib"
+ num_libs=$(ldd $bin | grep -v ld-linux | grep -v linux-vdso | grep -v "$OUT/lib"| wc -l)
+
+ if [ 0$num_libs -ne 0 ]; then
+ echo "some libraries not linked to $ORIGIN/lib, oss-fuzz will fail!"
+ exit 1
+ fi
if [ -f ${bin}_seed_corpus.zip ]; then
seeds_found=yes
"samba-fuzz": [
# build the fuzzers (static) via the oss-fuzz script
("fuzzers-mkdir-prefix", "mkdir -p ${PREFIX_DIR}"),
- ("fuzzers-build", "OUT=${PREFIX_DIR} LIB_FUZZING_ENGINE= SANITIZER=address CXX= CFLAGS= ./lib/fuzzing/oss-fuzz/build_samba.sh --enable-afl"),
+ ("fuzzers-build", "OUT=${PREFIX_DIR} LIB_FUZZING_ENGINE= SANITIZER=address CXX= CFLAGS= ADDITIONAL_LDFLAGS='-fuse-ld=bfd' ./lib/fuzzing/oss-fuzz/build_samba.sh --enable-afl"),
("fuzzers-check", "./lib/fuzzing/oss-fuzz/check_build.sh ${PREFIX_DIR}")
],