Browse Source

- 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)
OPENBSD_6_2
otto 7 years ago
parent
commit
0c8e3f2e80
2 changed files with 18 additions and 8 deletions
  1. +9
    -4
      src/lib/libc/stdlib/malloc.c
  2. +9
    -4
      src/lib/libc/stdlib/posix_memalign.3

+ 9
- 4
src/lib/libc/stdlib/malloc.c View File

@ -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) 2008, 2010, 2011, 2016 Otto Moerbeek <otto@drijf.net>
* Copyright (c) 2012 Matthew Dempsky <matthew@openbsd.org> * 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 * 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; size_t psz;
void *p; 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) { 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) if (sz < alignment)
sz = alignment; sz = alignment;


+ 9
- 4
src/lib/libc/stdlib/posix_memalign.3 View File

@ -1,4 +1,4 @@
.\" $OpenBSD: posix_memalign.3,v 1.3 2012/06/18 17:03:52 matthew Exp $
.\" $OpenBSD: posix_memalign.3,v 1.4 2017/05/13 07:11:29 otto Exp $
.\" Copyright (C) 2006 Jason Evans <jasone@FreeBSD.org>. .\" Copyright (C) 2006 Jason Evans <jasone@FreeBSD.org>.
.\" All rights reserved. .\" All rights reserved.
.\" .\"
@ -28,7 +28,7 @@
.\" .\"
.\" $FreeBSD: src/lib/libc/stdlib/posix_memalign.3,v 1.3 2007/03/28 04:32:51 jasone Exp $ .\" $FreeBSD: src/lib/libc/stdlib/posix_memalign.3,v 1.3 2007/03/28 04:32:51 jasone Exp $
.\" .\"
.Dd $Mdocdate: June 18 2012 $
.Dd $Mdocdate: May 13 2017 $
.Dt POSIX_MEMALIGN 3 .Dt POSIX_MEMALIGN 3
.Os .Os
.Sh NAME .Sh NAME
@ -56,9 +56,14 @@ must be a power of 2 at least as large as
Memory that is allocated via Memory that is allocated via
.Fn posix_memalign .Fn posix_memalign
can be used as an argument in subsequent calls to can be used as an argument in subsequent calls to
.Xr realloc 3
.Xr realloc 3 ,
.Xr reallocarray 3
and
.Xr free 3 ,
but not
.Xr recallocarray 3
and and
.Xr free 3 .
.Xr freezero 3 .
.Sh RETURN VALUES .Sh RETURN VALUES
The The
.Fn posix_memalign .Fn posix_memalign


Loading…
Cancel
Save