diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libc/stdlib/malloc.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/lib/libc/stdlib/malloc.c b/src/lib/libc/stdlib/malloc.c index 0af2e2fdea..37404a199e 100644 --- a/src/lib/libc/stdlib/malloc.c +++ b/src/lib/libc/stdlib/malloc.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: malloc.c,v 1.105 2008/11/02 08:50:41 otto Exp $ */ | 1 | /* $OpenBSD: malloc.c,v 1.106 2008/11/06 12:32:45 otto Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2008 Otto Moerbeek <otto@drijf.net> | 3 | * Copyright (c) 2008 Otto Moerbeek <otto@drijf.net> |
4 | * | 4 | * |
@@ -477,6 +477,8 @@ map(struct dir_info *d, size_t sz, int zero_fill) | |||
477 | d->free_regions_size -= psz; | 477 | d->free_regions_size -= psz; |
478 | if (zero_fill) | 478 | if (zero_fill) |
479 | memset(p, 0, sz); | 479 | memset(p, 0, sz); |
480 | else if (malloc_junk && malloc_freeprot) | ||
481 | memset(p, SOME_FREEJUNK, sz); | ||
480 | return p; | 482 | return p; |
481 | } else if (r->size > psz) | 483 | } else if (r->size > psz) |
482 | big = r; | 484 | big = r; |
@@ -1199,7 +1201,7 @@ ofree(void *p) | |||
1199 | } | 1201 | } |
1200 | malloc_guarded -= malloc_guard; | 1202 | malloc_guarded -= malloc_guard; |
1201 | } | 1203 | } |
1202 | if (malloc_junk) | 1204 | if (malloc_junk && !malloc_freeprot) |
1203 | memset(p, SOME_FREEJUNK, PAGEROUND(sz) - malloc_guard); | 1205 | memset(p, SOME_FREEJUNK, PAGEROUND(sz) - malloc_guard); |
1204 | unmap(&g_pool, p, PAGEROUND(sz)); | 1206 | unmap(&g_pool, p, PAGEROUND(sz)); |
1205 | delete(&g_pool, r); | 1207 | delete(&g_pool, r); |
@@ -1209,10 +1211,12 @@ ofree(void *p) | |||
1209 | 1211 | ||
1210 | if (malloc_junk && sz > 0) | 1212 | if (malloc_junk && sz > 0) |
1211 | memset(p, SOME_FREEJUNK, sz); | 1213 | memset(p, SOME_FREEJUNK, sz); |
1212 | i = getrbyte() & (MALLOC_DELAYED_CHUNKS - 1); | 1214 | if (!malloc_freeprot) { |
1213 | tmp = p; | 1215 | i = getrbyte() & (MALLOC_DELAYED_CHUNKS - 1); |
1214 | p = g_pool.delayed_chunks[i]; | 1216 | tmp = p; |
1215 | g_pool.delayed_chunks[i] = tmp; | 1217 | p = g_pool.delayed_chunks[i]; |
1218 | g_pool.delayed_chunks[i] = tmp; | ||
1219 | } | ||
1216 | if (p != NULL) { | 1220 | if (p != NULL) { |
1217 | r = find(&g_pool, p); | 1221 | r = find(&g_pool, p); |
1218 | if (r == NULL) { | 1222 | if (r == NULL) { |