* Use mmap() instead of malloc() in the mmap() reimplementation so that
returned values are not in the heap.
This commit is contained in:
parent
672817517e
commit
87e48899ba
@ -217,13 +217,23 @@ int nbmaps = 0;
|
||||
|
||||
#define MMAP(fn, off_t) \
|
||||
do { \
|
||||
char *b = MAP_FAILED; \
|
||||
LOADSYM(fn); \
|
||||
ret = ORIG(fn)(start, length, prot, flags, fd, offset); \
|
||||
if(!_zz_ready || !_zz_iswatched(fd) || _zz_islocked(fd)) \
|
||||
return ret; \
|
||||
if(ret && length) \
|
||||
return ORIG(fn)(start, length, prot, flags, fd, offset); \
|
||||
ret = ORIG(fn)(NULL, length, prot, flags, fd, offset); \
|
||||
if(ret != MAP_FAILED && length) \
|
||||
{ \
|
||||
b = ORIG(fn)(start, length, PROT_READ | PROT_WRITE, \
|
||||
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); \
|
||||
if(b == MAP_FAILED) \
|
||||
{ \
|
||||
munmap(ret, length); \
|
||||
ret = MAP_FAILED; \
|
||||
} \
|
||||
} \
|
||||
if(b != MAP_FAILED) \
|
||||
{ \
|
||||
char *b = malloc(length); \
|
||||
int i, oldpos; \
|
||||
for(i = 0; i < nbmaps; i += 2) \
|
||||
if(maps[i] == NULL) \
|
||||
@ -283,7 +293,7 @@ int NEW(munmap)(void *start, size_t length)
|
||||
if(maps[i] != start)
|
||||
continue;
|
||||
|
||||
free(start);
|
||||
ORIG(munmap)(start, length);
|
||||
ret = ORIG(munmap)(maps[i + 1], length);
|
||||
maps[i] = NULL;
|
||||
maps[i + 1] = NULL;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user