Author: stepan Date: 2008-08-14 16:40:10 +0200 (Thu, 14 Aug 2008) New Revision: 3510
Modified: trunk/payloads/libpayload/libc/malloc.c Log: * fix memory allocator bug that lead to freelist corruption on the first malloc (and spent 8 bytes too much per malloc) * if the memory allocator detects freelist corruption, print a message instead of silently dying.
Signed-off-by: Stefan Reinauer stepan@coresystems.de Acked-by: Jordan Crouse jordan.crouse@amd.com
Modified: trunk/payloads/libpayload/libc/malloc.c =================================================================== --- trunk/payloads/libpayload/libc/malloc.c 2008-08-13 12:16:15 UTC (rev 3509) +++ trunk/payloads/libpayload/libc/malloc.c 2008-08-14 14:40:10 UTC (rev 3510) @@ -92,13 +92,15 @@ header = *((hdrtype_t *) ptr); int size = SIZE(header);
- if (!HAS_MAGIC(header) || size == 0) + if (!HAS_MAGIC(header) || size == 0) { + printf("memory allocator panic.\n"); halt(); + }
if (header & FLAG_FREE) { if (len <= size) { void *nptr = ptr + (HDRSIZE + len); - int nsize = size - (len + 8); + int nsize = size - (HDRSIZE + len);
/* Mark the block as used. */ *((hdrtype_t *) ptr) = USED_BLOCK(len); @@ -109,7 +111,7 @@
if (nsize > 0) *((hdrtype_t *) nptr) = - FREE_BLOCK(nsize - 4); + FREE_BLOCK(nsize);
return (void *)(ptr + HDRSIZE); }