mirror of
git://sourceware.org/git/glibc.git
synced 2025-02-17 13:00:43 +08:00
malloc: Simplify checked_request2size interface
In-band signaling avoids an uninitialized variable warning when building with -Og and GCC 12. Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
This commit is contained in:
parent
ef0700004b
commit
7519dee356
@ -275,7 +275,8 @@ realloc_check (void *oldmem, size_t bytes)
|
||||
malloc_printerr ("realloc(): invalid pointer");
|
||||
const INTERNAL_SIZE_T oldsize = chunksize (oldp);
|
||||
|
||||
if (!checked_request2size (rb, &chnb))
|
||||
chnb = checked_request2size (rb);
|
||||
if (chnb == 0)
|
||||
{
|
||||
__set_errno (ENOMEM);
|
||||
goto invert;
|
||||
|
@ -1333,15 +1333,15 @@ nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
MINSIZE : \
|
||||
((req) + SIZE_SZ + MALLOC_ALIGN_MASK) & ~MALLOC_ALIGN_MASK)
|
||||
|
||||
/* Check if REQ overflows when padded and aligned and if the resulting value
|
||||
is less than PTRDIFF_T. Returns TRUE and the requested size or MINSIZE in
|
||||
case the value is less than MINSIZE on SZ or false if any of the previous
|
||||
check fail. */
|
||||
static inline bool
|
||||
checked_request2size (size_t req, size_t *sz) __nonnull (1)
|
||||
/* Check if REQ overflows when padded and aligned and if the resulting
|
||||
value is less than PTRDIFF_T. Returns the requested size or
|
||||
MINSIZE in case the value is less than MINSIZE, or 0 if any of the
|
||||
previous checks fail. */
|
||||
static inline size_t
|
||||
checked_request2size (size_t req) __nonnull (1)
|
||||
{
|
||||
if (__glibc_unlikely (req > PTRDIFF_MAX))
|
||||
return false;
|
||||
return 0;
|
||||
|
||||
/* When using tagged memory, we cannot share the end of the user
|
||||
block with the header for the next chunk, so ensure that we
|
||||
@ -1359,8 +1359,7 @@ checked_request2size (size_t req, size_t *sz) __nonnull (1)
|
||||
~(size_t)(__MTAG_GRANULE_SIZE - 1);
|
||||
}
|
||||
|
||||
*sz = request2size (req);
|
||||
return true;
|
||||
return request2size (req);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -3295,8 +3294,8 @@ __libc_malloc (size_t bytes)
|
||||
ptmalloc_init ();
|
||||
#if USE_TCACHE
|
||||
/* int_free also calls request2size, be careful to not pad twice. */
|
||||
size_t tbytes;
|
||||
if (!checked_request2size (bytes, &tbytes))
|
||||
size_t tbytes = checked_request2size (bytes);
|
||||
if (tbytes == 0)
|
||||
{
|
||||
__set_errno (ENOMEM);
|
||||
return NULL;
|
||||
@ -3443,7 +3442,8 @@ __libc_realloc (void *oldmem, size_t bytes)
|
||||
|| __builtin_expect (misaligned_chunk (oldp), 0)))
|
||||
malloc_printerr ("realloc(): invalid pointer");
|
||||
|
||||
if (!checked_request2size (bytes, &nb))
|
||||
nb = checked_request2size (bytes);
|
||||
if (nb == 0)
|
||||
{
|
||||
__set_errno (ENOMEM);
|
||||
return NULL;
|
||||
@ -3800,7 +3800,8 @@ _int_malloc (mstate av, size_t bytes)
|
||||
aligned.
|
||||
*/
|
||||
|
||||
if (!checked_request2size (bytes, &nb))
|
||||
nb = checked_request2size (bytes);
|
||||
if (nb == 0)
|
||||
{
|
||||
__set_errno (ENOMEM);
|
||||
return NULL;
|
||||
@ -4952,7 +4953,8 @@ _int_memalign (mstate av, size_t alignment, size_t bytes)
|
||||
|
||||
|
||||
|
||||
if (!checked_request2size (bytes, &nb))
|
||||
nb = checked_request2size (bytes);
|
||||
if (nb == 0)
|
||||
{
|
||||
__set_errno (ENOMEM);
|
||||
return NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user