make: build dependencies with fuzzing flags

By using fuzzer instrumentation for dependencies, we get more coverage
signal during fuzzing. This is useful when the fuzzer must figure out
how to take certain branches in a dependency.

In our case, the fuzz-bip32 target was failing to create a data buffer
that successfully passed fromwire_ext_key() parsing because the fuzzer
couldn't see what was happening inside libwally-core.
This commit is contained in:
Matt Morehouse 2023-05-16 10:48:18 -05:00 committed by Christian Decker
parent dff2dd259e
commit eed73082f5
2 changed files with 7 additions and 4 deletions

5
configure vendored
View File

@ -148,6 +148,7 @@ set_defaults()
ASAN=${ASAN:-0} ASAN=${ASAN:-0}
UBSAN=${UBSAN:-0} UBSAN=${UBSAN:-0}
FUZZING=${FUZZING:-0} FUZZING=${FUZZING:-0}
FUZZFLAGS=""
CSANFLAGS="" CSANFLAGS=""
if [ "$ASAN" != 0 ]; then if [ "$ASAN" != 0 ]; then
CSANFLAGS="$CSANFLAGS -fsanitize=address" CSANFLAGS="$CSANFLAGS -fsanitize=address"
@ -162,7 +163,8 @@ set_defaults()
fi fi
fi fi
if [ "$FUZZING" != 0 ]; then if [ "$FUZZING" != 0 ]; then
CSANFLAGS="$CSANFLAGS -fsanitize=fuzzer-no-link" FUZZFLAGS="-fsanitize=fuzzer-no-link"
CSANFLAGS="$CSANFLAGS $FUZZFLAGS"
fi fi
echo CSANFLAGS = $CSANFLAGS echo CSANFLAGS = $CSANFLAGS
PYTEST=${PYTEST-$(default_pytest)} PYTEST=${PYTEST-$(default_pytest)}
@ -473,6 +475,7 @@ add_var CWARNFLAGS "$CWARNFLAGS"
add_var CDEBUGFLAGS "$CDEBUGFLAGS" add_var CDEBUGFLAGS "$CDEBUGFLAGS"
add_var COPTFLAGS "$COPTFLAGS" add_var COPTFLAGS "$COPTFLAGS"
add_var CSANFLAGS "$CSANFLAGS" add_var CSANFLAGS "$CSANFLAGS"
add_var FUZZFLAGS "$FUZZFLAGS"
add_var SQLITE3_CFLAGS "$SQLITE3_CFLAGS" add_var SQLITE3_CFLAGS "$SQLITE3_CFLAGS"
add_var SQLITE3_LDLIBS "$SQLITE3_LDLIBS" add_var SQLITE3_LDLIBS "$SQLITE3_LDLIBS"
add_var POSTGRES_INCLUDE "$POSTGRES_INCLUDE" add_var POSTGRES_INCLUDE "$POSTGRES_INCLUDE"

6
external/Makefile vendored
View File

@ -71,7 +71,7 @@ $(TARGET_DIR)/libsodium.a: $(TARGET_DIR)/libsodium-build/src/libsodium/libsodium
$(TARGET_DIR)/libsodium-build/src/libsodium/libsodium.la: external/libsodium/src/libsodium/include/sodium.h $(TARGET_DIR)/libsodium-build/src/libsodium/libsodium.la: external/libsodium/src/libsodium/include/sodium.h
cd external/libsodium && ./autogen.sh cd external/libsodium && ./autogen.sh
mkdir -p ${TARGET_DIR}/libsodium-build mkdir -p ${TARGET_DIR}/libsodium-build
cd $(TARGET_DIR)/libsodium-build && $(TOP)/libsodium/configure CC="$(CC)" --enable-static=yes $(CROSSCOMPILE_OPTS) --enable-shared=no --prefix=/ --libdir=/ && $(MAKE) cd $(TARGET_DIR)/libsodium-build && $(TOP)/libsodium/configure CC="$(CC)" CFLAGS="$(FUZZFLAGS)" LDFLAGS="$(FUZZFLAGS)" --enable-static=yes $(CROSSCOMPILE_OPTS) --enable-shared=no --prefix=/ --libdir=/ && $(MAKE)
# libsecp included in libwally. # libsecp included in libwally.
# Wildcards here are magic. See http://stackoverflow.com/questions/2973445/gnu-makefile-rule-generating-a-few-targets-from-a-single-source-file # Wildcards here are magic. See http://stackoverflow.com/questions/2973445/gnu-makefile-rule-generating-a-few-targets-from-a-single-source-file
@ -83,7 +83,7 @@ $(TARGET_DIR)/libwally-core-build/src/libwallycore.% $(TARGET_DIR)/libwally-core
cd external/libwally-core && ./tools/autogen.sh cd external/libwally-core && ./tools/autogen.sh
mkdir -p ${TARGET_DIR}/libwally-core-build mkdir -p ${TARGET_DIR}/libwally-core-build
cd ${TARGET_DIR}/libwally-core-build \ cd ${TARGET_DIR}/libwally-core-build \
&& PYTHON_VERSION=3 CFLAGS=-std=c99 ${TOP}/libwally-core/configure CC="$(CC)" \ && PYTHON_VERSION=3 CFLAGS="-std=c99 $(FUZZFLAGS)" LDFLAGS="$(FUZZFLAGS)" ${TOP}/libwally-core/configure CC="$(CC)" \
--enable-static=yes \ --enable-static=yes \
$(CROSSCOMPILE_OPTS) \ $(CROSSCOMPILE_OPTS) \
--enable-module-recovery \ --enable-module-recovery \
@ -115,7 +115,7 @@ $(TARGET_DIR)/libbacktrace.a: external/libbacktrace/backtrace.h
$(MAKE) -C $(TARGET_DIR)/libbacktrace-build DESTDIR=$$(pwd)/$(TARGET_DIR) install-exec $(MAKE) -C $(TARGET_DIR)/libbacktrace-build DESTDIR=$$(pwd)/$(TARGET_DIR) install-exec
$(TARGET_DIR)/lowdown-build/bin/lowdown: external/lowdown/lowdown.h $(TARGET_DIR)/lowdown-build/bin/lowdown: external/lowdown/lowdown.h
cd external/lowdown && CC="$(CC)" ./configure PREFIX=`pwd`/$(TOP)/$(TARGET_DIR)/lowdown-build/ cd external/lowdown && CC="$(CC)" CFLAGS="$(FUZZFLAGS)" ./configure LDFLAGS="$(FUZZFLAGS)" PREFIX=`pwd`/$(TOP)/$(TARGET_DIR)/lowdown-build/
$(MAKE) -C external/lowdown install $(MAKE) -C external/lowdown install
distclean: external-distclean distclean: external-distclean