diff options
author | devzero2000 <devzero2000> | 2013-07-03 14:08:58 +0000 |
---|---|---|
committer | devzero2000 <devzero2000> | 2013-07-03 14:08:58 +0000 |
commit | a34a222589a60312b58086ba7374e7c96884a2ba (patch) | |
tree | 4c0cb656ca455c1be508c03beead11170a8c4f4f | |
parent | 0eee2afd3d5506f218cfaec6ced893962390b069 (diff) | |
download | libpopt-a34a222589a60312b58086ba7374e7c96884a2ba.tar.gz |
Don't use MALLOC_CHECK_ and valgrind(memcheck) at the
same time
The test suite can use valgrind(memcheck) via 'configure --enable-valgrind'
Memcheck wraps client calls to malloc(), and puts a "red zone" on
each end of each block in order to detect access overruns.
Memcheck already detects double free() (up to the limit of the buffer
which remembers pending free()). Thus memcheck subsumes all the
documented coverage of MALLOC_CHECK_.
If MALLOC_CHECK_ is set non-zero when running memcheck, then the
overruns that might be detected by MALLOC_CHECK_ would be overruns
on the wrapped blocks which include the red zones. Thus MALLOC_CHECK_
would be checking memcheck, and not the client. This is not useful,
and actually is wasteful. The only possible [documented] advantage
of using MALLOC_CHECK_ and memcheck together, would be if MALLOC_CHECK_
detected duplicate free() in more cases than memcheck because memcheck's
buffer is too small.
-rw-r--r-- | CHANGES | 16 | ||||
-rw-r--r-- | Makefile.am | 2 | ||||
-rwxr-xr-x | testit.sh | 44 |
3 files changed, 52 insertions, 10 deletions
@@ -1,4 +1,20 @@ 1.17 -> 2.0: + - devzero2000: Don't use MALLOC_CHECK_ and valgrind(memcheck) at the + same time + The test suite can use valgrind(memcheck) via 'configure --enable-valgrind' + Memcheck wraps client calls to malloc(), and puts a "red zone" on + each end of each block in order to detect access overruns. + Memcheck already detects double free() (up to the limit of the buffer + which remembers pending free()). Thus memcheck subsumes all the + documented coverage of MALLOC_CHECK_. + If MALLOC_CHECK_ is set non-zero when running memcheck, then the + overruns that might be detected by MALLOC_CHECK_ would be overruns + on the wrapped blocks which include the red zones. Thus MALLOC_CHECK_ + would be checking memcheck, and not the client. This is not useful, + and actually is wasteful. The only possible [documented] advantage + of using MALLOC_CHECK_ and memcheck together, would be if MALLOC_CHECK_ + detected duplicate free() in more cases than memcheck because memcheck's + buffer is too small. - devzero2000: malloc check voodo portability quirk Get rid of a non portable shell export VAR=VALUE costruct. "Posix requires export to honor assignments diff --git a/Makefile.am b/Makefile.am index 725e674..41a22be 100644 --- a/Makefile.am +++ b/Makefile.am @@ -110,7 +110,7 @@ tdict_LDADD = $(top_builddir)/$(usrlib_LTLIBRARIES) test3_LDADD = $(top_builddir)/$(usrlib_LTLIBRARIES) TESTS_ENVIRONMENT = top_srcdir=$(top_srcdir) MUDFLAP_OPTIONS="$(MUDFLAP_OPTIONS)" testpoptrc="$(top_srcdir)/test-poptrc" PATH=.:../src:$$PATH \ - $(VALGRIND_ENVIRONMENT) \ + valgrind_environment="$(VALGRIND_ENVIRONMENT)" \ $(SHELL) @@ -3,17 +3,43 @@ # malloc voo-doo ############################################### # see http://lists.gnupg.org/pipermail/gcrypt-devel/2010-June/001605.html -MALLOC_CHECK_=3 -export MALLOC_CHECK_ -# http://udrepper.livejournal.com/11429.html -MALLOC_PERTURB_=`expr \( $RANDOM % 255 \) + 1 ` -export MALLOC_PERTURB_ +# and http://udrepper.livejournal.com/11429.html +# and http://git.661346.n2.nabble.com/PATCHv2-Add-MALLOC-CHECK-and-MALLOC-PERTURB-libc-env-to-the-test-suite-for-detecting-heap-corruption-td7566915.html # -if [ -z "${MALLOC_PERTURB_}" ] # XXX: some shell don't have RANDOM ? +# Please note: we dont't use malloc_check if executing valgrind +# +# The test suite can use also valgrind(memcheck) via 'configure --enable-valgrind' +# +# Memcheck wraps client calls to malloc(), and puts a "red zone" on +# each end of each block in order to detect access overruns. +# Memcheck already detects double free() (up to the limit of the buffer +# which remembers pending free()). Thus memcheck subsumes all the +# documented coverage of MALLOC_CHECK_. +# If MALLOC_CHECK_ is set non-zero when running memcheck, then the +# overruns that might be detected by MALLOC_CHECK_ would be overruns +# on the wrapped blocks which include the red zones. Thus MALLOC_CHECK_ +# would be checking memcheck, and not the client. This is not useful, +# and actually is wasteful. The only possible [documented] advantage +# of using MALLOC_CHECK_ and memcheck together, would be if MALLOC_CHECK_ +# detected duplicate free() in more cases than memcheck because memcheck's +# buffer is too small. +# Therefore we don't use MALLOC_CHECK_ and valgrind(memcheck) at the +# same time. +############################################### +if [ -z "${valgrind_environment}" ] then - r=`ps -ef | cksum | cut -f1 -d" " 2>/dev/null` - [ -z "${r}" ] && r=1234567890 - export MALLOC_PERTURB_=`expr \( $r % 255 \) + 1 ` + MALLOC_CHECK_=3 + export MALLOC_CHECK_ + MALLOC_PERTURB_=`expr \( $RANDOM % 255 \) + 1 ` + export MALLOC_PERTURB_ + # + if [ -z "${MALLOC_PERTURB_}" ] # XXX: some shell don't have RANDOM ? + then + r=`ps -ef | cksum | cut -f1 -d" " 2>/dev/null` + [ -z "${r}" ] && r=1234567890 + MALLOC_PERTURB_=`expr \( $r % 255 \) + 1 ` + export MALLOC_PERTURB_ + fi fi run() { |