diff options
author | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2021-02-17 10:15:18 +0000 |
---|---|---|
committer | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2021-03-26 11:03:06 +0000 |
commit | d32624802d0b2105c95f699dd6a887b54cebf197 (patch) | |
tree | 97b93d1bbc80fad133a307471b661b4ae659b97f | |
parent | 63a20eb03c0c363cf5271eb3a2fa0bb7552c01be (diff) | |
download | glibc-d32624802d0b2105c95f699dd6a887b54cebf197.tar.gz glibc-d32624802d0b2105c95f699dd6a887b54cebf197.tar.xz glibc-d32624802d0b2105c95f699dd6a887b54cebf197.zip |
malloc: Use mtag_enabled instead of USE_MTAG
Use the runtime check where possible: it should not cause slow down in the !USE_MTAG case since then mtag_enabled is constant false, but it allows compiling the tagging logic so it's less likely to break or diverge when developers only test the !USE_MTAG case. Reviewed-by: DJ Delorie <dj@redhat.com>
-rw-r--r-- | malloc/hooks.c | 10 | ||||
-rw-r--r-- | malloc/malloc.c | 10 |
2 files changed, 8 insertions, 12 deletions
diff --git a/malloc/hooks.c b/malloc/hooks.c index d8e304c31c..9474e199c3 100644 --- a/malloc/hooks.c +++ b/malloc/hooks.c @@ -262,11 +262,10 @@ free_check (void *mem, const void *caller) int err = errno; -#ifdef USE_MTAG /* Quickly check that the freed pointer matches the tag for the memory. This gives a useful double-free detection. */ - *(volatile char *)mem; -#endif + if (__glibc_unlikely (mtag_enabled)) + *(volatile char *)mem; __libc_lock_lock (main_arena.mutex); p = mem2chunk_check (mem, NULL); @@ -310,11 +309,10 @@ realloc_check (void *oldmem, size_t bytes, const void *caller) return NULL; } -#ifdef USE_MTAG /* Quickly check that the freed pointer matches the tag for the memory. This gives a useful double-free detection. */ - *(volatile char *)oldmem; -#endif + if (__glibc_unlikely (mtag_enabled)) + *(volatile char *)oldmem; __libc_lock_lock (main_arena.mutex); const mchunkptr oldp = mem2chunk_check (oldmem, &magic_p); diff --git a/malloc/malloc.c b/malloc/malloc.c index 9eadc0c3e2..80e4eb6549 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -3286,11 +3286,10 @@ __libc_free (void *mem) if (mem == 0) /* free(0) has no effect */ return; -#ifdef USE_MTAG /* Quickly check that the freed pointer matches the tag for the memory. This gives a useful double-free detection. */ - *(volatile char *)mem; -#endif + if (__glibc_unlikely (mtag_enabled)) + *(volatile char *)mem; int err = errno; @@ -3352,11 +3351,10 @@ __libc_realloc (void *oldmem, size_t bytes) if (oldmem == 0) return __libc_malloc (bytes); -#ifdef USE_MTAG /* Perform a quick check to ensure that the pointer's tag matches the memory's tag. */ - *(volatile char*) oldmem; -#endif + if (__glibc_unlikely (mtag_enabled)) + *(volatile char*) oldmem; /* chunk corresponding to oldmem */ const mchunkptr oldp = mem2chunk (oldmem); |