[Libguestfs] [PATCH libnbd] tests: Use libc_malloc_debug.so.0 instead of MALLOC_CHECK_ for glibc 2.34

Richard W.M. Jones rjones at redhat.com
Tue Aug 24 16:13:25 UTC 2021


glibc 2.34 changes the way that malloc checking works.  For more
context see these nbdkit commits:

https://gitlab.com/nbdkit/nbdkit/-/commit/362e0fdcae37db876e13b944102a5c152e6bc563
https://gitlab.com/nbdkit/nbdkit/-/commit/8972831aa2a32d4b5820465d37c1827eb76450e4

Thanks: Siddhesh Poyarekar and Eric Blake
---
 configure.ac            | 12 ++++++++++++
 copy/Makefile.am        |  3 +--
 fuse/Makefile.am        |  3 +--
 golang/Makefile.am      |  3 +--
 info/Makefile.am        |  3 +--
 ocaml/tests/Makefile.am |  3 +--
 python/Makefile.am      |  3 +--
 sh/Makefile.am          |  3 +--
 subdir-rules.mk         | 16 ++++++++++++++++
 tests/Makefile.am       |  3 +--
 10 files changed, 36 insertions(+), 16 deletions(-)

diff --git a/configure.ac b/configure.ac
index 734d2730..3e7f367e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -121,6 +121,18 @@ AC_CHECK_HEADERS([dlfcn.h],[have_dlfcn=yes],[have_dlfcn=no])
 AM_CONDITIONAL([HAVE_LIBDL],
                [test "x$have_libdl" = "xyes" && test "x$have_dlfcn" = "xyes"])
 
+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 Check for GnuTLS (optional, for TLS support).
 AC_ARG_WITH([gnutls],
     [AS_HELP_STRING([--without-gnutls],
diff --git a/copy/Makefile.am b/copy/Makefile.am
index d35abe46..f2100853 100644
--- a/copy/Makefile.am
+++ b/copy/Makefile.am
@@ -53,8 +53,7 @@ EXTRA_DIST = \
 
 TESTS_ENVIRONMENT = \
 	LIBNBD_DEBUG=1 \
-	MALLOC_CHECK_=1 \
-	MALLOC_PERTURB_=$(shell bash -c 'echo $$(( 1 + (RANDOM & 255) ))') \
+	$(MALLOC_CHECKS) \
 	EXPECTED_VERSION=$(VERSION) \
 	PSKTOOL=$(PSKTOOL) \
 	QEMU_NBD=$(QEMU_NBD) \
diff --git a/fuse/Makefile.am b/fuse/Makefile.am
index d8691862..26ea0b0f 100644
--- a/fuse/Makefile.am
+++ b/fuse/Makefile.am
@@ -37,8 +37,7 @@ EXTRA_DIST = \
 
 TESTS_ENVIRONMENT = \
 	LIBNBD_DEBUG=1 \
-	MALLOC_CHECK_=1 \
-	MALLOC_PERTURB_=$(shell bash -c 'echo $$(( 1 + (RANDOM & 255) ))') \
+	$(MALLOC_CHECKS) \
 	EXPECTED_VERSION=$(VERSION) \
 	$(NULL)
 LOG_COMPILER = $(top_builddir)/run
diff --git a/golang/Makefile.am b/golang/Makefile.am
index a8771190..77c0e0cf 100644
--- a/golang/Makefile.am
+++ b/golang/Makefile.am
@@ -89,8 +89,7 @@ all-local: $(source_files)
 
 TESTS_ENVIRONMENT = \
 	LIBNBD_DEBUG=1 \
-	MALLOC_CHECK_=1 \
-	MALLOC_PERTURB_=$(shell bash -c 'echo $$(( 1 + (RANDOM & 255) ))') \
+	$(MALLOC_CHECKS) \
 	pkg=$(pkg) \
 	abs_top_srcdir=$(abs_top_srcdir) \
 	$(NULL)
diff --git a/info/Makefile.am b/info/Makefile.am
index a5708ec5..332ef80d 100644
--- a/info/Makefile.am
+++ b/info/Makefile.am
@@ -58,8 +58,7 @@ EXTRA_DIST = \
 
 TESTS_ENVIRONMENT = \
 	LIBNBD_DEBUG=1 \
-	MALLOC_CHECK_=1 \
-	MALLOC_PERTURB_=$(shell bash -c 'echo $$(( 1 + (RANDOM & 255) ))') \
+	$(MALLOC_CHECKS) \
 	EXPECTED_VERSION=$(VERSION) \
 	QEMU_NBD=$(QEMU_NBD) \
 	$(NULL)
diff --git a/ocaml/tests/Makefile.am b/ocaml/tests/Makefile.am
index e0e42e72..6fac8b7c 100644
--- a/ocaml/tests/Makefile.am
+++ b/ocaml/tests/Makefile.am
@@ -121,8 +121,7 @@ endif
 
 TESTS_ENVIRONMENT = \
 	LIBNBD_DEBUG=1 \
-	MALLOC_CHECK_=1 \
-	MALLOC_PERTURB_=$(shell bash -c 'echo $$(( 1 + (RANDOM & 255) ))') \
+	$(MALLOC_CHECKS) \
 	OCAMLRUNPARAM=b \
 	$(NULL)
 LOG_COMPILER = $(top_builddir)/run
diff --git a/python/Makefile.am b/python/Makefile.am
index a05c016a..f51d40e1 100644
--- a/python/Makefile.am
+++ b/python/Makefile.am
@@ -80,8 +80,7 @@ if HAVE_NBDKIT
 
 TESTS_ENVIRONMENT = \
 	LIBNBD_DEBUG=1 \
-	MALLOC_CHECK_=1 \
-	MALLOC_PERTURB_=$(shell bash -c 'echo $$(( 1 + (RANDOM & 255) ))') \
+	$(MALLOC_CHECKS) \
 	PYTHON="$(PYTHON)" \
 	$(NULL)
 LOG_COMPILER = $(top_builddir)/run
diff --git a/sh/Makefile.am b/sh/Makefile.am
index 4bf0e1a4..1e732d4d 100644
--- a/sh/Makefile.am
+++ b/sh/Makefile.am
@@ -50,8 +50,7 @@ endif HAVE_POD
 TESTS_ENVIRONMENT = \
 	LIBNBD_DEBUG=1 \
 	NBDKIT_DEBUG=1 \
-	MALLOC_CHECK_=1 \
-	MALLOC_PERTURB_=$(shell bash -c 'echo $$(( 1 + (RANDOM & 255) ))') \
+	$(MALLOC_CHECKS) \
 	EXPECTED_VERSION=$(VERSION) \
 	$(NULL)
 LOG_COMPILER = $(top_builddir)/run
diff --git a/subdir-rules.mk b/subdir-rules.mk
index afb3e022..6d382c6d 100644
--- a/subdir-rules.mk
+++ b/subdir-rules.mk
@@ -31,3 +31,19 @@ endif
 
 $(top_builddir)/podwrapper.pl: $(top_srcdir)/podwrapper.pl.in
 	$(MAKE) -C $(top_builddir) podwrapper.pl
+
+# In tests, include $(MALLOC_CHECKS) in TESTS_ENVIRONMENT to find some
+# use-after-free and uninitialized read problems when using glibc.
+# This doesn't affect other libc.
+random = $(shell bash -c 'echo $$(( 1 + (RANDOM & 255) ))')
+if HAVE_GLIBC_234
+MALLOC_CHECKS = \
+	LD_PRELOAD="$${LD_PRELOAD:+"$$LD_PRELOAD:"}libc_malloc_debug.so.0" \
+	GLIBC_TUNABLES=glibc.malloc.check=1:glibc.malloc.perturb=$(random) \
+	$(NULL)
+else
+MALLOC_CHECKS = \
+	MALLOC_CHECK_=1 \
+	MALLOC_PERTURB_=$(random) \
+	$(NULL)
+endif
diff --git a/tests/Makefile.am b/tests/Makefile.am
index aad55130..f2e89081 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -51,8 +51,7 @@ TESTS =
 # Enable debug in all tests.
 TESTS_ENVIRONMENT = \
 	LIBNBD_DEBUG=1 \
-	MALLOC_CHECK_=1 \
-	MALLOC_PERTURB_=$(shell bash -c 'echo $$(( 1 + (RANDOM & 255) ))') \
+	$(MALLOC_CHECKS) \
 	srcdir=$(srcdir) \
 	$(NULL)
 # Use the ./run script so we're always using the local library and tools.
-- 
2.32.0




More information about the Libguestfs mailing list