From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.nh2.me (mail.nh2.me [IPv6:2a01:4f8:1c0c:8227::1]) by sourceware.org (Postfix) with ESMTPS id 153553858435 for ; Fri, 29 Oct 2021 17:11:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 153553858435 To: libc-alpha@sourceware.org From: =?UTF-8?Q?Niklas_Hamb=c3=bcchen?= Subject: [PATCH] malloc_stats(): Fix `unsigned int` overflow Message-ID: Date: Fri, 29 Oct 2021 19:11:34 +0200 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_INFOUSMEBIZ, SPF_HELO_PASS, SPF_PASS autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 29 Oct 2021 17:11:38 -0000 Fixes malloc_stats() returning vastly wrong information for programs that use more than 2 GiB memory. `man mallinfo` documents that it uses `int` and wraps around, but `man malloc_stats` does not, and should not. Fixes https://sourceware.org/bugzilla/show_bug.cgi?id=21556 Signed-off-by: Niklas Hambüchen --- malloc/malloc.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/malloc/malloc.c b/malloc/malloc.c index 095d97a3be..cdc9aff9d5 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -5151,7 +5151,7 @@ __malloc_stats (void) { int i; mstate ar_ptr; - unsigned int in_use_b = mp_.mmapped_mem, system_b = in_use_b; + size_t in_use_b = mp_.mmapped_mem, system_b = in_use_b; if (!__malloc_initialized) ptmalloc_init (); @@ -5166,8 +5166,8 @@ __malloc_stats (void) __libc_lock_lock (ar_ptr->mutex); int_mallinfo (ar_ptr, &mi); fprintf (stderr, "Arena %d:\n", i); - fprintf (stderr, "system bytes = %10u\n", (unsigned int) mi.arena); - fprintf (stderr, "in use bytes = %10u\n", (unsigned int) mi.uordblks); + fprintf (stderr, "system bytes = %10lu\n", mi.arena); + fprintf (stderr, "in use bytes = %10lu\n", mi.uordblks); #if MALLOC_DEBUG > 1 if (i > 0) dump_heap (heap_for_ptr (top (ar_ptr))); @@ -5180,9 +5180,9 @@ __malloc_stats (void) break; } fprintf (stderr, "Total (incl. mmap):\n"); - fprintf (stderr, "system bytes = %10u\n", system_b); - fprintf (stderr, "in use bytes = %10u\n", in_use_b); - fprintf (stderr, "max mmap regions = %10u\n", (unsigned int) mp_.max_n_mmaps); + fprintf (stderr, "system bytes = %10lu\n", system_b); + fprintf (stderr, "in use bytes = %10lu\n", in_use_b); + fprintf (stderr, "max mmap regions = %10d\n", mp_.max_n_mmaps); fprintf (stderr, "max mmap bytes = %10lu\n", (unsigned long) mp_.max_mmapped_mem); stderr->_flags2 = old_flags2; -- 2.31.1