mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-28 00:21:52 +03:00
MTE: Do not pad size in realloc_check
The MTE patch to add malloc support incorrectly padded the size passed to _int_realloc by SIZE_SZ when it ought to have sent just the chunksize. Revert that bit of the change so that realloc works correctly with MALLOC_CHECK_ set. This also brings the realloc_check implementation back in sync with libc_realloc.
This commit is contained in:
@ -315,7 +315,7 @@ realloc_check (void *oldmem, size_t bytes, const void *caller)
|
|||||||
__libc_lock_unlock (main_arena.mutex);
|
__libc_lock_unlock (main_arena.mutex);
|
||||||
if (!oldp)
|
if (!oldp)
|
||||||
malloc_printerr ("realloc(): invalid pointer");
|
malloc_printerr ("realloc(): invalid pointer");
|
||||||
const INTERNAL_SIZE_T oldchsize = CHUNK_AVAILABLE_SIZE (oldp);
|
const INTERNAL_SIZE_T oldsize = chunksize (oldp);
|
||||||
|
|
||||||
if (!checked_request2size (rb, &chnb))
|
if (!checked_request2size (rb, &chnb))
|
||||||
goto invert;
|
goto invert;
|
||||||
@ -331,7 +331,8 @@ realloc_check (void *oldmem, size_t bytes, const void *caller)
|
|||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (oldchsize >= chnb)
|
/* Note the extra SIZE_SZ overhead. */
|
||||||
|
if (oldsize - SIZE_SZ >= chnb)
|
||||||
newmem = oldmem; /* do nothing */
|
newmem = oldmem; /* do nothing */
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -340,7 +341,7 @@ realloc_check (void *oldmem, size_t bytes, const void *caller)
|
|||||||
newmem = _int_malloc (&main_arena, rb);
|
newmem = _int_malloc (&main_arena, rb);
|
||||||
if (newmem)
|
if (newmem)
|
||||||
{
|
{
|
||||||
memcpy (newmem, oldmem, oldchsize - CHUNK_HDR_SZ);
|
memcpy (newmem, oldmem, oldsize - CHUNK_HDR_SZ);
|
||||||
munmap_chunk (oldp);
|
munmap_chunk (oldp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -349,7 +350,7 @@ realloc_check (void *oldmem, size_t bytes, const void *caller)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
top_check ();
|
top_check ();
|
||||||
newmem = _int_realloc (&main_arena, oldp, oldchsize, chnb);
|
newmem = _int_realloc (&main_arena, oldp, oldsize, chnb);
|
||||||
}
|
}
|
||||||
|
|
||||||
DIAG_PUSH_NEEDS_COMMENT;
|
DIAG_PUSH_NEEDS_COMMENT;
|
||||||
|
Reference in New Issue
Block a user