[glibc/release/2.39/master] Hide all malloc functions from compiler [BZ #32366]

Sam James sjames@sourceware.org
Fri Jan 24 01:11:12 GMT 2025


https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=c1f7bfbe081ebf807b6374a497ad5d5a9f499574

commit c1f7bfbe081ebf807b6374a497ad5d5a9f499574
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Tue Dec 17 18:41:45 2024 +0800

    Hide all malloc functions from compiler [BZ #32366]
    
    Since -1 isn't a power of two, compiler may reject it, hide memalign from
    Clang 19 which issues an error:
    
    tst-memalign.c:86:31: error: requested alignment is not a power of 2 [-Werror,-Wnon-power-of-two-alignment]
       86 |   p = memalign (-1, pagesize);
          |                 ^~
    tst-memalign.c:86:31: error: requested alignment must be 4294967296 bytes or smaller; maximum alignment assumed [-Werror,-Wbuiltin-assume-aligned-alignment]
       86 |   p = memalign (-1, pagesize);
          |                 ^~
    
    Update tst-malloc-aux.h to hide all malloc functions and include it in
    all malloc tests to prevent compiler from optimizing out any malloc
    functions.
    
    Tested with Clang 19.1.5 and GCC 15 20241206 for BZ #32366.
    
    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
    Reviewed-by: Sam James <sam@gentoo.org>
    (cherry picked from commit f9493a15ea9cfb63a815c00c23142369ec09d8ce)

Diff:
---
 malloc/tst-mallinfo2.c        |  2 ++
 malloc/tst-malloc-aux.h       | 25 ++++++++++++++++++++-----
 malloc/tst-malloc-backtrace.c |  2 ++
 malloc/tst-memalign.c         |  2 ++
 malloc/tst-safe-linking.c     |  2 ++
 malloc/tst-valloc.c           |  2 ++
 6 files changed, 30 insertions(+), 5 deletions(-)

diff --git a/malloc/tst-mallinfo2.c b/malloc/tst-mallinfo2.c
index 2c02f5f700..f072b9f24b 100644
--- a/malloc/tst-mallinfo2.c
+++ b/malloc/tst-mallinfo2.c
@@ -23,6 +23,8 @@
 #include <stdlib.h>
 #include <support/check.h>
 
+#include "tst-malloc-aux.h"
+
 /* This is not specifically needed for the test, but (1) does
    something to the data so gcc doesn't optimize it away, and (2) may
    help when developing future tests.  */
diff --git a/malloc/tst-malloc-aux.h b/malloc/tst-malloc-aux.h
index 54908b4a24..3e1b61ce34 100644
--- a/malloc/tst-malloc-aux.h
+++ b/malloc/tst-malloc-aux.h
@@ -22,20 +22,35 @@
 
 #include <stddef.h>
 #include <stdlib.h>
-
-static void *(*volatile aligned_alloc_indirect)(size_t, size_t) = aligned_alloc;
-static void *(*volatile calloc_indirect)(size_t, size_t) = calloc;
-static void *(*volatile malloc_indirect)(size_t) = malloc;
-static void *(*volatile realloc_indirect)(void*, size_t) = realloc;
+#include <malloc.h>
+
+static __typeof (aligned_alloc) * volatile aligned_alloc_indirect
+  = aligned_alloc;
+static __typeof (calloc) * volatile calloc_indirect = calloc;
+static __typeof (malloc) * volatile malloc_indirect = malloc;
+static __typeof (memalign) * volatile memalign_indirect = memalign;
+static __typeof (posix_memalign) * volatile posix_memalign_indirect
+  = posix_memalign;
+static __typeof (pvalloc) * volatile pvalloc_indirect = pvalloc;
+static __typeof (realloc) * volatile realloc_indirect = realloc;
+static __typeof (valloc) * volatile valloc_indirect = valloc;
 
 #undef aligned_alloc
 #undef calloc
 #undef malloc
+#undef memalign
+#undef posix_memalign
+#undef pvalloc
 #undef realloc
+#undef valloc
 
 #define aligned_alloc aligned_alloc_indirect
 #define calloc calloc_indirect
 #define malloc malloc_indirect
+#define memalign memalign_indirect
+#define posix_memalign posix_memalign_indirect
+#define pvalloc pvalloc_indirect
 #define realloc realloc_indirect
+#define valloc valloc_indirect
 
 #endif /* TST_MALLOC_AUX_H */
diff --git a/malloc/tst-malloc-backtrace.c b/malloc/tst-malloc-backtrace.c
index c7b1d65e5c..65fa91f6fd 100644
--- a/malloc/tst-malloc-backtrace.c
+++ b/malloc/tst-malloc-backtrace.c
@@ -22,6 +22,8 @@
 #include <support/support.h>
 #include <libc-diag.h>
 
+#include "tst-malloc-aux.h"
+
 #define SIZE 4096
 
 /* Wrap free with a function to prevent gcc from optimizing it out.  */
diff --git a/malloc/tst-memalign.c b/malloc/tst-memalign.c
index 563f6413d2..ac9770d3f9 100644
--- a/malloc/tst-memalign.c
+++ b/malloc/tst-memalign.c
@@ -23,6 +23,8 @@
 #include <unistd.h>
 #include <libc-diag.h>
 
+#include "tst-malloc-aux.h"
+
 static int errors = 0;
 
 static void
diff --git a/malloc/tst-safe-linking.c b/malloc/tst-safe-linking.c
index 01dd07004d..63a7e2bc8e 100644
--- a/malloc/tst-safe-linking.c
+++ b/malloc/tst-safe-linking.c
@@ -26,6 +26,8 @@
 #include <support/capture_subprocess.h>
 #include <support/check.h>
 
+#include "tst-malloc-aux.h"
+
 /* Run CALLBACK and check that the data on standard error equals
    EXPECTED.  */
 static void
diff --git a/malloc/tst-valloc.c b/malloc/tst-valloc.c
index 9bab8c6470..0243d3dfd4 100644
--- a/malloc/tst-valloc.c
+++ b/malloc/tst-valloc.c
@@ -23,6 +23,8 @@
 #include <unistd.h>
 #include <libc-diag.h>
 
+#include "tst-malloc-aux.h"
+
 static int errors = 0;
 
 static void


More information about the Glibc-cvs mailing list