summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorotto <>2012-12-22 07:32:17 +0000
committerotto <>2012-12-22 07:32:17 +0000
commit6453f215f5463a02d8367c503969b10d3f8e0ccf (patch)
tree87ebe514f033ea9c8831892252e2d1a8f142c197
parent1ce012fb3cbbffe9296c0d458127363199a418a2 (diff)
downloadopenbsd-6453f215f5463a02d8367c503969b10d3f8e0ccf.tar.gz
openbsd-6453f215f5463a02d8367c503969b10d3f8e0ccf.tar.bz2
openbsd-6453f215f5463a02d8367c503969b10d3f8e0ccf.zip
Fix bug in random offset introduced in rev 1.143; random range was
expanded, but not enough due to precedence error. Spotted by Thorsten Glaser.
-rw-r--r--src/lib/libc/stdlib/malloc.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/lib/libc/stdlib/malloc.c b/src/lib/libc/stdlib/malloc.c
index b14c747652..af17587552 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.148 2012/11/02 18:18:15 djm Exp $ */ 1/* $OpenBSD: malloc.c,v 1.149 2012/12/22 07:32:17 otto Exp $ */
2/* 2/*
3 * Copyright (c) 2008 Otto Moerbeek <otto@drijf.net> 3 * Copyright (c) 2008 Otto Moerbeek <otto@drijf.net>
4 * 4 *
@@ -321,7 +321,7 @@ unmap(struct dir_info *d, void *p, size_t sz)
321 rsz = mopts.malloc_cache - d->free_regions_size; 321 rsz = mopts.malloc_cache - d->free_regions_size;
322 if (psz > rsz) 322 if (psz > rsz)
323 tounmap = psz - rsz; 323 tounmap = psz - rsz;
324 offset = getrnibble() + getrnibble() << 4; 324 offset = getrnibble() + (getrnibble() << 4);
325 for (i = 0; tounmap > 0 && i < mopts.malloc_cache; i++) { 325 for (i = 0; tounmap > 0 && i < mopts.malloc_cache; i++) {
326 r = &d->free_regions[(i + offset) & (mopts.malloc_cache - 1)]; 326 r = &d->free_regions[(i + offset) & (mopts.malloc_cache - 1)];
327 if (r->p != NULL) { 327 if (r->p != NULL) {
@@ -402,7 +402,7 @@ map(struct dir_info *d, size_t sz, int zero_fill)
402 /* zero fill not needed */ 402 /* zero fill not needed */
403 return p; 403 return p;
404 } 404 }
405 offset = getrnibble() + getrnibble() << 4; 405 offset = getrnibble() + (getrnibble() << 4);
406 for (i = 0; i < mopts.malloc_cache; i++) { 406 for (i = 0; i < mopts.malloc_cache; i++) {
407 r = &d->free_regions[(i + offset) & (mopts.malloc_cache - 1)]; 407 r = &d->free_regions[(i + offset) & (mopts.malloc_cache - 1)];
408 if (r->p != NULL) { 408 if (r->p != NULL) {