about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSzabolcs Nagy <szabolcs.nagy@arm.com>2021-02-04 11:52:14 +0000
committerSzabolcs Nagy <szabolcs.nagy@arm.com>2021-03-19 11:46:20 +0000
commit7307a417dfc26aa032d66ce9ae41b0ef78577366 (patch)
treec76a8dc4ae6225bb9411b6d4791d3488dbb73db9
parent67c2661c42f047abb0863c95dd385eaa656bcb47 (diff)
downloadglibc-7307a417dfc26aa032d66ce9ae41b0ef78577366.tar.gz
glibc-7307a417dfc26aa032d66ce9ae41b0ef78577366.tar.xz
glibc-7307a417dfc26aa032d66ce9ae41b0ef78577366.zip
malloc: Avoid taggig mmaped memory on free
Either the memory belongs to the dumped area, in which case we don't
want to tag (the dumped area has the same tag as malloc internal data
so tagging is unnecessary, but chunks there may not have the right
alignment for the tag granule), or the memory will be unmapped
immediately (and thus tagging is not useful).

Reviewed-by: DJ Delorie <dj@redhat.com>
-rw-r--r--malloc/malloc.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/malloc/malloc.c b/malloc/malloc.c
index 61c25d0f93..ecb87350b0 100644
--- a/malloc/malloc.c
+++ b/malloc/malloc.c
@@ -3284,9 +3284,6 @@ __libc_free (void *mem)
 
   p = mem2chunk (mem);
 
-  /* Mark the chunk as belonging to the library again.  */
-  (void)TAG_REGION (chunk2rawmem (p), CHUNK_AVAILABLE_SIZE (p) - CHUNK_HDR_SZ);
-
   if (chunk_is_mmapped (p))                       /* release mmapped memory. */
     {
       /* See if the dynamic brk/mmap threshold needs adjusting.
@@ -3307,6 +3304,10 @@ __libc_free (void *mem)
     {
       MAYBE_INIT_TCACHE ();
 
+      /* Mark the chunk as belonging to the library again.  */
+      (void)TAG_REGION (chunk2rawmem (p),
+			CHUNK_AVAILABLE_SIZE (p) - CHUNK_HDR_SZ);
+
       ar_ptr = arena_for_chunk (p);
       _int_free (ar_ptr, p, 0);
     }