evil_hdr-stripes_payload_dmg.bz2 \
evil_hdr-luks_hdr_damage.bz2 \
evil_hdr-small_luks_device.bz2 \
- compat-test loopaes-test align-test discards-test mode-test password-hash-test
+ compat-test loopaes-test align-test discards-test mode-test password-hash-test \
+ cryptsetup-valg-supps valg.sh valg-api.sh
-CLEANFILES = cryptsetuptst.*
+CLEANFILES = cryptsetup-tst* valglog*
differ_SOURCES = differ.c
differ_CFLAGS = -Wall -O2
compatimage.img:
@bzip2 -k -d compatimage.img.bz2
+
+valgrind-check: api-test differ
+ @VALG=1 ./compat-test
+ @INFOSTRING="api-test-000" ./valg-api.sh ./api-test
+
+.PHONY: valgrind-check
function fail()
{
+ [ -n "$1" ] && echo "$1"
remove_mapping
echo "FAILED"
exit 2
check $1
}
+function valgrind_setup()
+{
+ which valgrind >/dev/null 2>&1 || fail "Cannot find valgrind"
+
+ CRYPTSETUP_BIN=$($CRYPTSETUP --lt-debug --version 2>&1 \
+ | grep "newargv\[0\]" \
+ | sed 's/.*newargv\[0\]\:[[:space:]]\+\(.*\)$/\1/g')
+ [ -z "$CRYPTSETUP_BIN" ] && fail "Unable to get location of cryptsetup executable."
+ export LD_LIBRARY_PATH="../lib/.libs:$LD_LIBRARY_PATH"
+}
+
+function valgrind_run()
+{
+ INFOSTRING="$(basename ${BASH_SOURCE[1]})-line-${BASH_LINENO[0]}" ./valg.sh ${CRYPTSETUP_BIN} "$@"
+}
+
[ $(id -u) != 0 ] && skip "WARNING: You must be root to run this test, test skipped."
[ -z "$LOOPDEV" ] && skip "Cannot find free loop device, test skipped."
+[ -n "$VALG" ] && valgrind_setup && CRYPTSETUP=valgrind_run
+
# LUKS tests
prepare "[1] open - compat image - acceptance check" new
--- /dev/null
+# Supresion file for valgrind
+
+# known problem in libgcrypt
+{
+ leak_in_libgcrypt_00
+ Memcheck:Leak
+ fun:malloc
+ obj:/lib64/libgcrypt.so*
+ ...
+ obj:/lib64/libgcrypt.so*
+ fun:crypt_backend_init
+ fun:init_crypto
+ ...
+}
+# TODO soon... we use global static errno to be read
+# from device context or from library default logging
+{
+ errno_leak_utils
+ Memcheck:Leak
+ fun:*lloc
+ obj:/lib*/libc*.so
+ fun:set_error_va
+ fun:set_error
+ ...
+}
+# following leaks/errors are addressed to libpopt...
+{
+ popt_read_error
+ Memcheck:Addr4
+ obj:/lib*/libpopt.so*
+ fun:poptGetNextOpt
+ fun:main
+}
+{
+ popt_leak_poptGetNextOpt_00
+ Memcheck:Leak
+ fun:realloc
+ fun:poptGetNextOpt
+ fun:main
+}
+{
+ popt_leak_poptGetNextOpt_01
+ Memcheck:Leak
+ fun:malloc
+ fun:poptGetNextOpt
+ fun:main
+}
--- /dev/null
+#!/bin/sh
+SUP="--suppressions=./cryptsetup-valg-supps"
+CHILD="--trace-children=no --child-silent-after-fork=yes"
+MALLOC="--malloc-fill=aa"
+FREE="--free-fill=21"
+STACK="--max-stackframe=300000"
+EXTRAS="--read-var-info=yes --show-reachable=yes"
+LOGFILE="--log-file=./valglog.$(date +%s)_${INFOSTRING}"
+LEAKCHECK="--leak-check=full --track-origins=yes"
+
+exec valgrind $SUP $GETSUP $CHILD $MALLOC $FREE $STACK $EXTRAS $LOGFILE $LEAKCHECK "$@"
--- /dev/null
+#!/bin/sh
+SUP="--suppressions=./cryptsetup-valg-supps"
+CHILD="--trace-children=yes --child-silent-after-fork=yes"
+MALLOC="--malloc-fill=aa"
+FREE="--free-fill=21"
+STACK="--max-stackframe=300000"
+EXTRAS="--read-var-info=yes --show-reachable=yes"
+LOGFILE="--log-file=./valglog.$(date +%s)_${INFOSTRING}"
+LEAKCHECK="--leak-check=full --track-origins=yes"
+
+exec valgrind $SUP $GETSUP $CHILD $MALLOC $FREE $STACK $EXTRAS $LOGFILE $LEAKCHECK "$@"