diff options
Diffstat (limited to 'malloc/malloc-check.c')
| -rw-r--r-- | malloc/malloc-check.c | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/malloc/malloc-check.c b/malloc/malloc-check.c index c5265ec..820d6f5 100644 --- a/malloc/malloc-check.c +++ b/malloc/malloc-check.c @@ -111,7 +111,7 @@ mem2chunk_check (void *mem, unsigned char **magic_p) INTERNAL_SIZE_T sz, c; unsigned char magic; - if (!aligned_OK (mem)) + if (misaligned_mem (mem)) return NULL; p = mem2chunk (mem); @@ -151,8 +151,8 @@ mem2chunk_check (void *mem, unsigned char **magic_p) offset != 0x200 && offset != 0x400 && offset != 0x800 && offset != 0x1000 && offset < 0x2000) || !chunk_is_mmapped (p) || prev_inuse (p) || - ((((unsigned long) p - prev_size (p)) & page_mask) != 0) || - ((prev_size (p) + sz) & page_mask) != 0) + (((mmap_base (p)) & page_mask) != 0) || + (mmap_size (p) & page_mask) != 0) return NULL; for (sz = CHUNK_HDR_SZ + memsize (p) - 1; @@ -273,14 +273,13 @@ realloc_check (void *oldmem, size_t bytes) __libc_lock_unlock (main_arena.mutex); if (!oldp) malloc_printerr ("realloc(): invalid pointer"); - const INTERNAL_SIZE_T oldsize = chunksize (oldp); - chnb = checked_request2size (rb); - if (chnb == 0) + if (rb > PTRDIFF_MAX) { __set_errno (ENOMEM); goto invert; } + chnb = checked_request2size (rb); __libc_lock_lock (main_arena.mutex); @@ -293,8 +292,8 @@ realloc_check (void *oldmem, size_t bytes) else #endif { - /* Note the extra SIZE_SZ overhead. */ - if (oldsize - SIZE_SZ >= chnb) + size_t oldsize = memsize (oldp); + if (oldsize >= rb) newmem = oldmem; /* do nothing */ else { @@ -303,7 +302,7 @@ realloc_check (void *oldmem, size_t bytes) newmem = _int_malloc (&main_arena, rb); if (newmem) { - memcpy (newmem, oldmem, oldsize - CHUNK_HDR_SZ); + memcpy (newmem, oldmem, oldsize); munmap_chunk (oldp); } } @@ -312,14 +311,14 @@ realloc_check (void *oldmem, size_t bytes) else { top_check (); - newmem = _int_realloc (&main_arena, oldp, oldsize, chnb); + newmem = _int_realloc (&main_arena, oldp, chunksize (oldp), chnb); } DIAG_PUSH_NEEDS_COMMENT; #if __GNUC_PREREQ (7, 0) /* GCC 7 warns about magic_p may be used uninitialized. But we never reach here if magic_p is uninitialized. */ - DIAG_IGNORE_NEEDS_COMMENT (7, "-Wmaybe-uninitialized"); + DIAG_IGNORE_NEEDS_COMMENT_GCC (7, "-Wmaybe-uninitialized"); #endif /* mem2chunk_check changed the magic byte in the old chunk. If newmem is NULL, then the old chunk will still be used though, @@ -389,7 +388,7 @@ initialize_malloc_check (void) { /* This is the copy of the malloc initializer that we pulled in along with malloc-check. This does not affect any of the libc malloc structures. */ - ptmalloc_init (); + __ptmalloc_init (); TUNABLE_GET (check, int32_t, TUNABLE_CALLBACK (set_mallopt_check)); return __is_malloc_debug_enabled (MALLOC_CHECK_HOOK); } |
