From 963ee0e6ee5e318b8d14f81e40abe70d5b174544 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Wed, 21 Sep 2011 22:42:03 +0000 Subject: [PATCH] Add some valgrind checks (thanks to okozina). git-svn-id: https://cryptsetup.googlecode.com/svn/trunk@609 36d66b0a-2a48-0410-832c-cd162a569da5 --- tests/Makefile.am | 11 +++++++++-- tests/compat-test | 19 ++++++++++++++++++ tests/cryptsetup-valg-supps | 47 +++++++++++++++++++++++++++++++++++++++++++++ tests/valg-api.sh | 11 +++++++++++ tests/valg.sh | 11 +++++++++++ 5 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 tests/cryptsetup-valg-supps create mode 100755 tests/valg-api.sh create mode 100755 tests/valg.sh diff --git a/tests/Makefile.am b/tests/Makefile.am index 5762768..d9580a1 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -5,9 +5,10 @@ EXTRA_DIST = compatimage.img.bz2 valid_header_file.bz2 \ 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 @@ -21,3 +22,9 @@ check_PROGRAMS = api-test differ 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 diff --git a/tests/compat-test b/tests/compat-test index dcf3d5a..11fa62d 100755 --- a/tests/compat-test +++ b/tests/compat-test @@ -34,6 +34,7 @@ function remove_mapping() function fail() { + [ -n "$1" ] && echo "$1" remove_mapping echo "FAILED" exit 2 @@ -94,9 +95,27 @@ function check_exists() 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 diff --git a/tests/cryptsetup-valg-supps b/tests/cryptsetup-valg-supps new file mode 100644 index 0000000..72bf652 --- /dev/null +++ b/tests/cryptsetup-valg-supps @@ -0,0 +1,47 @@ +# 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 +} diff --git a/tests/valg-api.sh b/tests/valg-api.sh new file mode 100755 index 0000000..e27a269 --- /dev/null +++ b/tests/valg-api.sh @@ -0,0 +1,11 @@ +#!/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 "$@" diff --git a/tests/valg.sh b/tests/valg.sh new file mode 100755 index 0000000..82a7e06 --- /dev/null +++ b/tests/valg.sh @@ -0,0 +1,11 @@ +#!/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 "$@" -- 2.7.4