ftmemsim-valgrind/tests/toobig-allocs.c
Nicholas Nethercote 854d2ec10e Fix for bug #78048.
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
2004-07-10 14:56:28 +00:00

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;
}