[Libguestfs] [PATCH nbdkit v3] tests: Improve test for libc_malloc_debug

Richard W.M. Jones rjones at redhat.com
Tue Aug 24 14:10:40 UTC 2021


Previous commits tried to add support for new glibc 2.34 feature
libc_malloc_debug by checking for the specific version of glibc.
However this risks setting LD_PRELOAD to a non-existent path (eg. if
the user does not specify any ./configure --prefix which results in
setting LD_PRELOAD=/usr/local/lib/libc_malloc_debug.so.0).

While LD_PRELOAD normally just warns (noisily) if it cannot find the
library, the warning causes some tests to fail.  In any case it's
better not to set LD_PRELOAD at all in this case.

Instead let's test for the presence of libc_malloc_debug on the
provided --prefix or --libdir path in ./configure, and then use that
to enable the LD_PRELOAD stuff.

Fixes: commit 8972831aa2a32d4b5820465d37c1827eb76450e4
Fixes: commit 362e0fdcae37db876e13b944102a5c152e6bc563
---
 configure.ac      | 31 ++++++++++++++++++++-----------
 tests/Makefile.am |  4 ++--
 2 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/configure.ac b/configure.ac
index ea13c75c..0e4c4a28 100644
--- a/configure.ac
+++ b/configure.ac
@@ -569,17 +569,26 @@ AS_IF([test "x$is_windows" = "xyes"],[
 
 AC_SEARCH_LIBS([getaddrinfo], [network socket])
 
-dnl Does this platform require libc_malloc_debug.so.0 (glibc >= 2.34)?
-AC_MSG_CHECKING([if this is glibc >= 2.34])
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-#include <limits.h>
-#if !defined(__GLIBC__) || __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 34)
-#error "not glibc 2.34"
-#endif
-        ]])], [is_glibc_234=yes], [is_glibc_234=no]
-)
-AC_MSG_RESULT([$is_glibc_234])
-AM_CONDITIONAL([HAVE_GLIBC_234], [test "x$is_glibc_234" = "xyes"])
+dnl Does this platform have $libdir/libc_malloc_debug.so.0 (glibc >=
+dnl 2.34)?  We have to override the idiotic exec_prefix misfeature to
+dnl get to the real libdir.
+real_libdir="$(
+    if test "x$prefix" != xNONE; then
+        exec_prefix="$prefix"
+    else
+        exec_prefix="$ac_default_prefix"
+    fi
+    eval echo $libdir
+)"
+LIBC_MALLOC_DEBUG="$real_libdir/libc_malloc_debug.so.0"
+AC_MSG_CHECKING([for $LIBC_MALLOC_DEBUG])
+AS_IF([test -r $LIBC_MALLOC_DEBUG], [
+    have_libc_malloc_debug=yes
+    AC_SUBST([LIBC_MALLOC_DEBUG])
+],[have_libc_malloc_debug=no])
+AC_MSG_RESULT([$have_libc_malloc_debug])
+AM_CONDITIONAL([HAVE_LIBC_MALLOC_DEBUG],
+               [test "x$have_libc_malloc_debug" = xyes])
 
 dnl Check for SELinux socket labelling (optional).
 PKG_CHECK_MODULES([LIBSELINUX], [libselinux], [
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 35b2e4a6..109853ea 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -74,9 +74,9 @@ TESTS_ENVIRONMENT = \
 # uninitialized read problems when using glibc, and doesn't affect
 # normal operation or other libc.
 random = $(shell bash -c 'echo $$(( 1 + (RANDOM & 255) ))')
-if HAVE_GLIBC_234
+if HAVE_LIBC_MALLOC_DEBUG
 TESTS_ENVIRONMENT += \
-	LD_PRELOAD="$${LD_PRELOAD:+"$$LD_PRELOAD:"}$(libdir)/libc_malloc_debug.so.0" \
+	LD_PRELOAD="$${LD_PRELOAD:+"$$LD_PRELOAD:"}$(LIBC_MALLOC_DEBUG)" \
 	GLIBC_TUNABLES=glibc.malloc.check=1:glibc.malloc.perturb=$(random) \
 	$(NULL)
 else
-- 
2.32.0




More information about the Libguestfs mailing list