5f7b84
commit 91d5989356325759503311df67e750b358ef4148
5f7b84
Author: Niklas Hambüchen <mail@nh2.me>
5f7b84
Date:   Thu Aug 8 22:02:27 2019 +0200
5f7b84
5f7b84
    malloc: Fix missing accounting of top chunk in malloc_info [BZ #24026]
5f7b84
    
5f7b84
    Fixes `<total type="rest" size="..."> incorrectly showing as 0 most
5f7b84
    of the time.
5f7b84
    
5f7b84
    The rest value being wrong is significant because to compute the
5f7b84
    actual amount of memory handed out via malloc, the user must subtract
5f7b84
    it from <system type="current" size="...">. That result being wrong
5f7b84
    makes investigating memory fragmentation issues like
5f7b84
    <https://bugzilla.redhat.com/show_bug.cgi?id=843478> close to
5f7b84
    impossible.
5f7b84
    
5f7b84
    (cherry picked from commit b6d2c4475d5abc05dd009575b90556bdd3c78ad0)
5f7b84
5f7b84
diff --git a/malloc/malloc.c b/malloc/malloc.c
5f7b84
index 4fc7f175fe42d6c6..fcf480acdaea1b86 100644
5f7b84
--- a/malloc/malloc.c
5f7b84
+++ b/malloc/malloc.c
5f7b84
@@ -5433,6 +5433,12 @@ __malloc_info (int options, FILE *fp)
5f7b84
 
5f7b84
       __libc_lock_lock (ar_ptr->mutex);
5f7b84
 
5f7b84
+      /* Account for top chunk.  The top-most available chunk is
5f7b84
+	 treated specially and is never in any bin. See "initial_top"
5f7b84
+	 comments.  */
5f7b84
+      avail = chunksize (ar_ptr->top);
5f7b84
+      nblocks = 1;  /* Top always exists.  */
5f7b84
+
5f7b84
       for (size_t i = 0; i < NFASTBINS; ++i)
5f7b84
 	{
5f7b84
 	  mchunkptr p = fastbin (ar_ptr, i);