From: "Martin Liška" <mliska@suse.cz>
To: Florian Weimer <fweimer@redhat.com>
Cc: libc-alpha@sourceware.org, Andreas Schwab <schwab@linux-m68k.org>
Subject: Re: [PATCH] Use size_t for mallinfo fields.
Date: Tue, 7 Jul 2020 15:52:20 +0200 [thread overview]
Message-ID: <e0ab40c3-9fff-b49e-c446-87f441d28365@suse.cz> (raw)
In-Reply-To: <87v9izxwo7.fsf@oldenburg2.str.redhat.com>
[-- Attachment #1: Type: text/plain, Size: 886 bytes --]
On 7/7/20 3:49 PM, Florian Weimer wrote:
> * Martin Liška:
>
>> On 7/7/20 2:17 PM, Andreas Schwab wrote:
>>> On Jul 07 2020, Martin Liška wrote:
>>>
>>>> The current int type can easily overflow for allocation of more
>>>> than 4GB.
>>>>
>>>> The following patch changes that to size_t. I guess I need to adjust
>>>> the API version of the function, right?
>>>
>>> Not only that, it breaks the ABI of mallinfo.
>>
>> Sure, so what options do I have? I'm new to glibc so a hint would be
>> appreciated.
>
> We need to add a new function. Symbol versioning does not work because
> mallinfo is interposed by alternative mallocs (tcmalloc, Address
> Sanitizer, etc.). Without the new function name, the interposer does
> not know which ABI the application expects, so it's going to be quite
> messy.
>
> Thanks,
> Florian
>
All right, am I closer with the suggested patch?
Martin
[-- Attachment #2: 0001-Use-size_t-for-mallinfo-fields.patch --]
[-- Type: text/x-patch, Size: 4840 bytes --]
From 514b41592d8f435d066817580e0cec29df15b818 Mon Sep 17 00:00:00 2001
From: Martin Liska <mliska@suse.cz>
Date: Tue, 7 Jul 2020 13:58:24 +0200
Subject: [PATCH] Use size_t for mallinfo fields.
The current int type can easily overflow for allocation of more
than 4GB.
---
malloc/malloc.c | 27 ++++++++++++++++++++++++++-
malloc/malloc.h | 16 +++++++++++++++-
manual/memory.texi | 22 +++++++++++-----------
3 files changed, 52 insertions(+), 13 deletions(-)
diff --git a/malloc/malloc.c b/malloc/malloc.c
index ee87ddbbf9..9944473a72 100644
--- a/malloc/malloc.c
+++ b/malloc/malloc.c
@@ -640,6 +640,8 @@ libc_hidden_proto (__libc_mallopt)
*/
struct mallinfo __libc_mallinfo(void);
+struct mallinfo_compat __libc_mallinfo_compat(void);
+
/*
pvalloc(size_t n);
@@ -4998,6 +5000,27 @@ __libc_mallinfo (void)
return m;
}
+struct mallinfo_compat
+__libc_mallinfo_compat (void)
+{
+ struct mallinfo_compat m;
+ struct mallinfo mnew = __libc_mallinfo ();
+
+ m.arena = mnew.arena;
+ m.ordblks = mnew.ordblks;
+ m.smblks = mnew.smblks;
+ m.hblks = mnew.hblks;
+ m.hblkhd = mnew.hblkhd;
+ m.usmblks = mnew.usmblks;
+ m.fsmblks = mnew.fsmblks;
+ m.uordblks = mnew.uordblks;
+ m.fordblks = mnew.fordblks;
+ m.keepcost = mnew.keepcost;
+
+ return m;
+}
+
+
/*
------------------------------ malloc_stats ------------------------------
*/
@@ -5630,8 +5653,10 @@ weak_alias (__libc_memalign, memalign)
strong_alias (__libc_realloc, __realloc) strong_alias (__libc_realloc, realloc)
strong_alias (__libc_valloc, __valloc) weak_alias (__libc_valloc, valloc)
strong_alias (__libc_pvalloc, __pvalloc) weak_alias (__libc_pvalloc, pvalloc)
-strong_alias (__libc_mallinfo, __mallinfo)
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_32)
weak_alias (__libc_mallinfo, mallinfo)
+compat_symbol (libc, __libc_mallinfo_compat, mallinfo, GLIBC_2_32);
+#endif
strong_alias (__libc_mallopt, __mallopt) weak_alias (__libc_mallopt, mallopt)
weak_alias (__malloc_stats, malloc_stats)
diff --git a/malloc/malloc.h b/malloc/malloc.h
index a6903fdd54..500012bea8 100644
--- a/malloc/malloc.h
+++ b/malloc/malloc.h
@@ -83,7 +83,7 @@ __THROW __attribute_malloc__;
/* SVID2/XPG mallinfo structure */
-struct mallinfo
+struct mallinfo_compat
{
int arena; /* non-mmapped space allocated from system */
int ordblks; /* number of free chunks */
@@ -97,6 +97,20 @@ struct mallinfo
int keepcost; /* top-most, releasable (via malloc_trim) space */
};
+struct mallinfo
+{
+ size_t arena; /* non-mmapped space allocated from system */
+ size_t ordblks; /* number of free chunks */
+ size_t smblks; /* number of fastbin blocks */
+ size_t hblks; /* number of mmapped regions */
+ size_t hblkhd; /* space in mmapped regions */
+ size_t usmblks; /* always 0, preserved for backwards compatibility */
+ size_t fsmblks; /* space available in freed fastbin blocks */
+ size_t uordblks; /* total allocated space */
+ size_t fordblks; /* total free space */
+ size_t keepcost; /* top-most, releasable (via malloc_trim) space */
+};
+
/* Returns a copy of the updated current mallinfo. */
extern struct mallinfo mallinfo (void) __THROW;
diff --git a/manual/memory.texi b/manual/memory.texi
index aa5011e4f9..ac803dd2d5 100644
--- a/manual/memory.texi
+++ b/manual/memory.texi
@@ -1516,39 +1516,39 @@ This structure type is used to return information about the dynamic
memory allocator. It contains the following members:
@table @code
-@item int arena
+@item size_t arena
This is the total size of memory allocated with @code{sbrk} by
@code{malloc}, in bytes.
-@item int ordblks
+@item size_t ordblks
This is the number of chunks not in use. (The memory allocator
-internally gets chunks of memory from the operating system, and then
+size_ternally gets chunks of memory from the operating system, and then
carves them up to satisfy individual @code{malloc} requests;
@pxref{The GNU Allocator}.)
-@item int smblks
+@item size_t smblks
This field is unused.
-@item int hblks
+@item size_t hblks
This is the total number of chunks allocated with @code{mmap}.
-@item int hblkhd
+@item size_t hblkhd
This is the total size of memory allocated with @code{mmap}, in bytes.
-@item int usmblks
+@item size_t usmblks
This field is unused and always 0.
-@item int fsmblks
+@item size_t fsmblks
This field is unused.
-@item int uordblks
+@item size_t uordblks
This is the total size of memory occupied by chunks handed out by
@code{malloc}.
-@item int fordblks
+@item size_t fordblks
This is the total size of memory occupied by free (not in use) chunks.
-@item int keepcost
+@item size_t keepcost
This is the size of the top-most releasable chunk that normally
borders the end of the heap (i.e., the high end of the virtual address
space's data segment).
--
2.27.0
next prev parent reply other threads:[~2020-07-07 13:52 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-07 12:00 [PATCH] Use size_t for mallinfo fields Martin Liška
2020-07-07 12:17 ` Andreas Schwab
2020-07-07 13:07 ` Martin Liška
2020-07-07 13:19 ` H.J. Lu via Libc-alpha
2020-07-07 13:49 ` Florian Weimer via Libc-alpha
2020-07-07 13:52 ` Martin Liška [this message]
2020-07-07 14:22 ` Florian Weimer via Libc-alpha
2020-07-07 14:32 ` Andreas Schwab
2020-07-07 14:36 ` Florian Weimer via Libc-alpha
2020-07-08 7:25 ` Martin Liška
2020-07-08 7:24 ` Martin Liška
2020-07-23 10:23 ` Martin Liška
2020-07-23 14:38 ` Szabolcs Nagy
2020-07-27 12:08 ` Martin Liška
2020-07-27 12:21 ` Florian Weimer via Libc-alpha
2020-07-27 12:45 ` Martin Liška
2020-08-11 12:26 ` Martin Liška
2020-08-11 13:44 ` Florian Weimer
2020-08-11 17:08 ` DJ Delorie via Libc-alpha
2020-08-12 12:29 ` Martin Liška
2020-08-24 9:55 ` Martin Liška
2020-08-28 19:05 ` DJ Delorie via Libc-alpha
2020-08-31 13:35 ` H.J. Lu via Libc-alpha
2020-08-31 13:56 ` Adhemerval Zanella via Libc-alpha
2020-08-31 14:00 ` H.J. Lu via Libc-alpha
2020-08-31 14:10 ` Adhemerval Zanella via Libc-alpha
2020-09-01 17:26 ` Joseph Myers
2020-09-02 13:19 ` Martin Liška
2020-09-02 13:34 ` Adhemerval Zanella via Libc-alpha
2020-09-02 14:00 ` Carlos O'Donell via Libc-alpha
2020-09-02 16:11 ` DJ Delorie via Libc-alpha
2020-09-21 8:49 ` Martin Liška
2020-09-02 20:16 ` DJ Delorie via Libc-alpha
2020-09-02 20:24 ` Florian Weimer
2020-09-02 21:04 ` [PATCH/v2] " DJ Delorie via Libc-alpha
2020-09-03 11:17 ` Adhemerval Zanella via Libc-alpha
2020-09-03 21:33 ` DJ Delorie via Libc-alpha
2020-09-17 23:02 ` DJ Delorie via Libc-alpha
2020-09-02 20:25 ` [PATCH] " Joseph Myers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/libc/involved.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e0ab40c3-9fff-b49e-c446-87f441d28365@suse.cz \
--to=mliska@suse.cz \
--cc=fweimer@redhat.com \
--cc=libc-alpha@sourceware.org \
--cc=schwab@linux-m68k.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).