diff options
author | otto <> | 2012-12-22 07:32:17 +0000 |
---|---|---|
committer | otto <> | 2012-12-22 07:32:17 +0000 |
commit | 6453f215f5463a02d8367c503969b10d3f8e0ccf (patch) | |
tree | 87ebe514f033ea9c8831892252e2d1a8f142c197 | |
parent | 1ce012fb3cbbffe9296c0d458127363199a418a2 (diff) | |
download | openbsd-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.c | 6 |
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) { |