aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilco Dijkstra <wilco.dijkstra@arm.com>2025-03-31 11:28:14 +0000
committerWilco Dijkstra <wilco.dijkstra@arm.com>2025-04-15 11:14:47 +0000
commit0296654d61ffa095fc7729f1efafa7d0e4fa4f7a (patch)
treed3fe7cabdbefa6edfbc1b5755d0128cdd05c9ce4
parent69da24fbc5861fbf30c29c89154020a5c40342ca (diff)
downloadglibc-0296654d61ffa095fc7729f1efafa7d0e4fa4f7a.zip
glibc-0296654d61ffa095fc7729f1efafa7d0e4fa4f7a.tar.gz
glibc-0296654d61ffa095fc7729f1efafa7d0e4fa4f7a.tar.bz2
malloc: Inline _int_free_check
Inline _int_free_check since it is only used by __libc_free. Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
-rw-r--r--malloc/malloc.c31
1 files changed, 12 insertions, 19 deletions
diff --git a/malloc/malloc.c b/malloc/malloc.c
index 49ff197..e827875 100644
--- a/malloc/malloc.c
+++ b/malloc/malloc.c
@@ -1086,7 +1086,6 @@ typedef struct malloc_chunk* mchunkptr;
/* Internal routines. */
static void* _int_malloc(mstate, size_t);
-static void _int_free_check (mstate, mchunkptr, INTERNAL_SIZE_T);
static void _int_free_chunk (mstate, mchunkptr, INTERNAL_SIZE_T, int);
static void _int_free_merge_chunk (mstate, mchunkptr, INTERNAL_SIZE_T);
static INTERNAL_SIZE_T _int_free_create_chunk (mstate,
@@ -3469,7 +3468,18 @@ __libc_free (void *mem)
INTERNAL_SIZE_T size = chunksize (p);
- _int_free_check (arena_for_chunk (p), p, size);
+ /* Little security check which won't hurt performance: the
+ allocator never wraps around at the end of the address space.
+ Therefore we can exclude some size values which might appear
+ here by accident or by "design" from some intruder. */
+ if (__glibc_unlikely ((uintptr_t) p > (uintptr_t) -size
+ || misaligned_chunk (p)))
+ malloc_printerr ("free(): invalid pointer");
+ /* We know that each chunk is at least MINSIZE bytes. */
+ if (__glibc_unlikely (size < MINSIZE))
+ malloc_printerr ("free(): invalid size");
+
+ check_inuse_chunk (arena_for_chunk (p), p);
#if USE_TCACHE
if (tcache_free (p, size))
@@ -4553,23 +4563,6 @@ _int_malloc (mstate av, size_t bytes)
------------------------------ free ------------------------------
*/
-static __always_inline void
-_int_free_check (mstate av, mchunkptr p, INTERNAL_SIZE_T size)
-{
- /* Little security check which won't hurt performance: the
- allocator never wraps around at the end of the address space.
- Therefore we can exclude some size values which might appear
- here by accident or by "design" from some intruder. */
- if (__builtin_expect ((uintptr_t) p > (uintptr_t) -size, 0)
- || __builtin_expect (misaligned_chunk (p), 0))
- malloc_printerr ("free(): invalid pointer");
- /* We know that each chunk is at least MINSIZE bytes. */
- if (__glibc_unlikely (size < MINSIZE))
- malloc_printerr ("free(): invalid size");
-
- check_inuse_chunk (av, p);
-}
-
/* Free chunk P of SIZE bytes to the arena. HAVE_LOCK indicates where
the arena for P has already been locked. Caller must ensure chunk
and size are valid. */