diff options
Diffstat (limited to 'src/lib/libc')
| -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) { |
