mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-04 02:18:37 +00:00
Problem was that the malloc-replacing tools (memcheck, addrcheck, massif, helgrind) would assert if a too-big malloc was attempted. Now they return 0 to the client. I also cleaned up the code handling heap-block-metadata in Massif and Addrcheck/Memcheck a little. This exposed a nasty bug in VG_(client_alloc)() which wasn't checking if find_map_space() was succeeding before attempting an mmap(). Before I added the check, very big mallocs (eg 2GB) for Addrcheck were overwriting the client space at address 0 and causing crashes. Added a regtest to all the affected skins for this. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@2462
24 lines
571 B
C
24 lines
571 B
C
#include <stdlib.h>
|
|
#include <sys/mman.h>
|
|
#include <stdio.h>
|
|
|
|
int main(void)
|
|
{
|
|
void *p;
|
|
|
|
int size = 2 * 1023 * 1024 * 1024; // just under 2^31 (2GB)
|
|
|
|
fprintf(stderr, "Attempting too-big malloc()...\n");
|
|
p = malloc(size); // way too big!
|
|
if (p)
|
|
fprintf(stderr, "huge malloc() succeeded??\n");
|
|
|
|
fprintf(stderr, "Attempting too-big mmap()...\n");
|
|
p = mmap( 0, size, PROT_READ|PROT_WRITE|PROT_EXEC,
|
|
MAP_PRIVATE|MAP_ANON, -1, 0 );
|
|
if (-1 != (int)p)
|
|
fprintf(stderr, "huge mmap() succeeded??\n");
|
|
|
|
return 0;
|
|
}
|