diff options
author | 2017-05-13 07:11:29 +0000 | |
---|---|---|
committer | 2017-05-13 07:11:29 +0000 | |
commit | 48c9124709407dc93befafefea3ab6ebcbb67149 (patch) | |
tree | 2433844c18806d01e350d552cc9b1156acef5542 /lib/libc/stdlib/malloc.c | |
parent | Compare >= for columns not >. (diff) | |
download | wireguard-openbsd-48c9124709407dc93befafefea3ab6ebcbb67149.tar.xz wireguard-openbsd-48c9124709407dc93befafefea3ab6ebcbb67149.zip |
- fix bug wrt posix_memalign(3) of blocks between half a page and a page
- document posix_memalign() does not play nice with reacallocarray(3) and
freezero(3)
Diffstat (limited to 'lib/libc/stdlib/malloc.c')
-rw-r--r-- | lib/libc/stdlib/malloc.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/lib/libc/stdlib/malloc.c b/lib/libc/stdlib/malloc.c index dc395c4736c..999da6c1e9c 100644 --- a/lib/libc/stdlib/malloc.c +++ b/lib/libc/stdlib/malloc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: malloc.c,v 1.224 2017/04/22 09:12:49 otto Exp $ */ +/* $OpenBSD: malloc.c,v 1.225 2017/05/13 07:11:29 otto Exp $ */ /* * Copyright (c) 2008, 2010, 2011, 2016 Otto Moerbeek <otto@drijf.net> * Copyright (c) 2012 Matthew Dempsky <matthew@openbsd.org> @@ -1974,15 +1974,20 @@ mapalign(struct dir_info *d, size_t alignment, size_t sz, int zero_fill) } static void * -omemalign(struct dir_info *pool, size_t alignment, size_t sz, int zero_fill, void *f) +omemalign(struct dir_info *pool, size_t alignment, size_t sz, int zero_fill, + void *f) { size_t psz; void *p; + /* If between half a page and a page, avoid MALLOC_MOVE. */ + if (sz > MALLOC_MAXCHUNK && sz < MALLOC_PAGESIZE) + sz = MALLOC_PAGESIZE; if (alignment <= MALLOC_PAGESIZE) { /* - * max(size, alignment) is enough to assure the requested alignment, - * since the allocator always allocates power-of-two blocks. + * max(size, alignment) is enough to assure the requested + * alignment, since the allocator always allocates + * power-of-two blocks. */ if (sz < alignment) sz = alignment; |