change the junking to be word size. maybe later we can also change the
values to be random or something.
Index: stdlib/malloc.c
===================================================================
RCS file: /cvs/src/lib/libc/stdlib/malloc.c,v
retrieving revision 1.149
diff -u -p -r1.149 malloc.c
--- stdlib/malloc.c 22 Dec 2012 07:32:17 -0000 1.149
+++ stdlib/malloc.c 3 Jul 2013 19:52:27 -0000
@@ -80,14 +80,6 @@
#define PAGEROUND(x) (((x) + (MALLOC_PAGEMASK)) & ~MALLOC_PAGEMASK)
-/*
- * What to use for Junk. This is the byte value we use to fill with
- * when the 'J' option is enabled. Use SOME_JUNK right after alloc,
- * and SOME_FREEJUNK right before free.
- */
-#define SOME_JUNK 0xd0 /* as in "Duh" :-) */
-#define SOME_FREEJUNK 0xdf
-
#define MMAP(sz) mmap(NULL, (size_t)(sz), PROT_READ | PROT_WRITE, \
MAP_ANON | MAP_PRIVATE, -1, (off_t) 0)
@@ -237,6 +229,18 @@ hash(void *p)
}
static void
+poison(void *p, size_t len)
+{
+ int *ip = p;
+ size_t i;
+ int pval = 0xd0d0caca;
+
+ len = len / 4;
+ for (i = 0; i < len; i++)
+ ip[i] = pval;
+}
+
+static void
wrterror(char *msg, void *p)
{
char *q = " error: ";
@@ -419,7 +423,7 @@ map(struct dir_info *d, size_t sz, int z
memset(p, 0, sz);
else if (mopts.malloc_junk &&
mopts.malloc_freeunmap)
- memset(p, SOME_FREEJUNK, sz);
+ poison(p, sz);
return p;
} else if (r->size > psz)
big = r;
@@ -437,7 +441,7 @@ map(struct dir_info *d, size_t sz, int z
if (zero_fill)
memset(p, 0, sz);
else if (mopts.malloc_junk && mopts.malloc_freeunmap)
- memset(p, SOME_FREEJUNK, sz);
+ poison(p, sz);
return p;
}
p = MMAP(sz);
@@ -975,7 +979,7 @@ malloc_bytes(struct dir_info *d, size_t
k <<= bp->shift;
if (mopts.malloc_junk && bp->size > 0)
- memset((char *)bp->page + k, SOME_JUNK, bp->size);
+ poison((char *)bp->page + k, bp->size);
return ((char *)bp->page + k);
}
@@ -1073,7 +1077,7 @@ omalloc(size_t sz, int zero_fill, void *
MALLOC_LEEWAY) {
/* fill whole allocation */
if (mopts.malloc_junk)
- memset(p, SOME_JUNK, psz - mopts.malloc_guard);
+ poison(p, psz - mopts.malloc_guard);
/* shift towards the end */
p = ((char *)p) + ((MALLOC_PAGESIZE - MALLOC_LEEWAY -
(sz - mopts.malloc_guard)) & ~(MALLOC_MINSIZE-1));
@@ -1083,11 +1087,10 @@ omalloc(size_t sz, int zero_fill, void *
} else {
if (mopts.malloc_junk) {
if (zero_fill)
- memset((char *)p + sz -
mopts.malloc_guard,
- SOME_JUNK, psz - sz);
+ poison((char *)p + sz -
+ mopts.malloc_guard, psz - sz);
else
- memset(p, SOME_JUNK,
- psz - mopts.malloc_guard);
+ poison(p, psz - mopts.malloc_guard);
}
}
@@ -1202,8 +1205,7 @@ ofree(void *p)
malloc_guarded -= mopts.malloc_guard;
}
if (mopts.malloc_junk && !mopts.malloc_freeunmap)
- memset(p, SOME_FREEJUNK,
- PAGEROUND(sz) - mopts.malloc_guard);
+ poison(p, PAGEROUND(sz) - mopts.malloc_guard);
unmap(g_pool, p, PAGEROUND(sz));
delete(g_pool, r);
} else {
@@ -1211,7 +1213,7 @@ ofree(void *p)
int i;
if (mopts.malloc_junk && sz > 0)
- memset(p, SOME_FREEJUNK, sz);
+ poison(p, sz);
if (!mopts.malloc_freenow) {
i = getrnibble();
tmp = p;
@@ -1308,7 +1310,7 @@ orealloc(void *p, size_t newsz, void *f)
if (q == hint) {
malloc_used += needed;
if (mopts.malloc_junk)
- memset(q, SOME_JUNK, needed);
+ poison(q, needed);
r->size = newsz;
STATS_SETF(r, f);
STATS_INC(g_pool->cheap_reallocs);
@@ -1335,7 +1337,7 @@ orealloc(void *p, size_t newsz, void *f)
return p;
} else {
if (newsz > oldsz && mopts.malloc_junk)
- memset((char *)p + newsz, SOME_JUNK,
+ poison((char *)p + newsz,
rnewsz - mopts.malloc_guard - newsz);
r->size = gnewsz;
STATS_SETF(r, f);
@@ -1344,7 +1346,7 @@ orealloc(void *p, size_t newsz, void *f)
}
if (newsz <= oldsz && newsz > oldsz / 2 && !mopts.malloc_realloc) {
if (mopts.malloc_junk && newsz > 0)
- memset((char *)p + newsz, SOME_JUNK, oldsz - newsz);
+ poison((char *)p + newsz, oldsz - newsz);
STATS_SETF(r, f);
return p;
} else if (newsz != oldsz || mopts.malloc_realloc) {
@@ -1516,10 +1518,9 @@ omemalign(size_t alignment, size_t sz, i
if (mopts.malloc_junk) {
if (zero_fill)
- memset((char *)p + sz - mopts.malloc_guard,
- SOME_JUNK, psz - sz);
+ poison((char *)p + sz - mopts.malloc_guard, psz - sz);
else
- memset(p, SOME_JUNK, psz - mopts.malloc_guard);
+ poison(p, psz - mopts.malloc_guard);
}
return p;