Browse Source

change mallocarray to reallocarray. useful in a few more situations.

malloc can, as always, be emulated via realloc(NULL).
ok deraadt
OPENBSD_5_6
tedu 10 years ago
parent
commit
07d1cf3ec2
4 changed files with 16 additions and 19 deletions
  1. +2
    -2
      src/include/stdlib.h
  2. +2
    -2
      src/lib/libc/stdlib/Makefile.inc
  3. +9
    -12
      src/lib/libc/stdlib/malloc.3
  4. +3
    -3
      src/lib/libc/stdlib/malloc.c

+ 2
- 2
src/include/stdlib.h View File

@ -1,4 +1,4 @@
/* $OpenBSD: stdlib.h,v 1.57 2014/04/21 13:17:32 deraadt Exp $ */
/* $OpenBSD: stdlib.h,v 1.58 2014/04/22 14:26:26 tedu Exp $ */
/* $NetBSD: stdlib.h,v 1.25 1995/12/27 21:19:08 jtc Exp $ */ /* $NetBSD: stdlib.h,v 1.25 1995/12/27 21:19:08 jtc Exp $ */
/*- /*-
@ -125,7 +125,7 @@ long labs(long);
ldiv_t ldiv(long, long); ldiv_t ldiv(long, long);
void *malloc(size_t); void *malloc(size_t);
#if __BSD_VISIBLE #if __BSD_VISIBLE
void *mallocarray(size_t, size_t);
void *reallocarray(void *, size_t, size_t);
#endif /* __BSD_VISIBLE */ #endif /* __BSD_VISIBLE */
void qsort(void *, size_t, size_t, int (*)(const void *, const void *)); void qsort(void *, size_t, size_t, int (*)(const void *, const void *));
int rand(void); int rand(void);


+ 2
- 2
src/lib/libc/stdlib/Makefile.inc View File

@ -1,4 +1,4 @@
# $OpenBSD: Makefile.inc,v 1.51 2014/04/21 13:21:57 deraadt Exp $
# $OpenBSD: Makefile.inc,v 1.52 2014/04/22 14:26:26 tedu Exp $
# stdlib sources # stdlib sources
.PATH: ${LIBCSRCDIR}/arch/${MACHINE_CPU}/stdlib ${LIBCSRCDIR}/stdlib .PATH: ${LIBCSRCDIR}/arch/${MACHINE_CPU}/stdlib ${LIBCSRCDIR}/stdlib
@ -44,7 +44,7 @@ MLINKS+=insque.3 remque.3
MLINKS+=labs.3 llabs.3 MLINKS+=labs.3 llabs.3
MLINKS+=lsearch.3 lfind.3 MLINKS+=lsearch.3 lfind.3
MLINKS+=malloc.3 free.3 malloc.3 realloc.3 malloc.3 calloc.3 MLINKS+=malloc.3 free.3 malloc.3 realloc.3 malloc.3 calloc.3
MLINKS+=malloc.3 mallocarray.3 malloc.3 cfree.3 malloc.3 malloc.conf.5
MLINKS+=malloc.3 reallocarray.3 malloc.3 cfree.3 malloc.3 malloc.conf.5
MLINKS+=qsort.3 heapsort.3 qsort.3 mergesort.3 MLINKS+=qsort.3 heapsort.3 qsort.3 mergesort.3
MLINKS+=radixsort.3 sradixsort.3 MLINKS+=radixsort.3 sradixsort.3
MLINKS+=rand.3 srand.3 rand.3 rand_r.3 MLINKS+=rand.3 srand.3 rand.3 rand_r.3


+ 9
- 12
src/lib/libc/stdlib/malloc.3 View File

@ -30,15 +30,15 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE. .\" SUCH DAMAGE.
.\" .\"
.\" $OpenBSD: malloc.3,v 1.74 2014/04/21 13:17:32 deraadt Exp $
.\" $OpenBSD: malloc.3,v 1.75 2014/04/22 14:26:26 tedu Exp $
.\" .\"
.Dd $Mdocdate: April 21 2014 $
.Dd $Mdocdate: April 22 2014 $
.Dt MALLOC 3 .Dt MALLOC 3
.Os .Os
.Sh NAME .Sh NAME
.Nm malloc , .Nm malloc ,
.Nm calloc , .Nm calloc ,
.Nm mallocarray ,
.Nm reallocarray ,
.Nm realloc , .Nm realloc ,
.Nm free , .Nm free ,
.Nm cfree .Nm cfree
@ -50,7 +50,7 @@
.Ft void * .Ft void *
.Fn calloc "size_t nmemb" "size_t size" .Fn calloc "size_t nmemb" "size_t size"
.Ft void * .Ft void *
.Fn mallocarray "size_t nmemb" "size_t size"
.Fn reallocarray "void *ptr" "size_t nmemb" "size_t size"
.Ft void * .Ft void *
.Fn realloc "void *ptr" "size_t size" .Fn realloc "void *ptr" "size_t size"
.Ft void .Ft void
@ -96,10 +96,10 @@ if ((p = malloc(num * size)) == NULL)
.Pp .Pp
The multiplication may lead to an integer overflow, which can The multiplication may lead to an integer overflow, which can
be avoided using the extension be avoided using the extension
.Fn mallocarray ,
.Fn reallocarray ,
as follows: as follows:
.Bd -literal -offset indent .Bd -literal -offset indent
if ((p = mallocarray(num, size)) == NULL)
if ((p = reallocarray(NULL, num, size)) == NULL)
err(1, "malloc"); err(1, "malloc");
.Ed .Ed
.Pp .Pp
@ -125,6 +125,8 @@ objects, each of whose size is
.Fa size . .Fa size .
The space is initialized to zero. The space is initialized to zero.
The use of The use of
.Fn reallocarray
or
.Fn calloc .Fn calloc
is strongly encouraged when allocating multiple sized objects is strongly encouraged when allocating multiple sized objects
in order to avoid possible integer overflows. in order to avoid possible integer overflows.
@ -309,11 +311,6 @@ malloc_options = "X";
.Pp .Pp
Note that this will cause code that is supposed to handle Note that this will cause code that is supposed to handle
out-of-memory conditions gracefully to abort instead. out-of-memory conditions gracefully to abort instead.
.It Cm Z
.Dq Zero .
Fill some junk into the area allocated (see
.Cm J ) ,
except for the exact length the user asked for, which is zeroed.
.It Cm < .It Cm <
.Dq Half the cache size . .Dq Half the cache size .
Decrease the size of the free page cache by a factor of two. Decrease the size of the free page cache by a factor of two.
@ -494,6 +491,6 @@ random.
A rewrite by Otto Moerbeek introducing a new central data structure and more A rewrite by Otto Moerbeek introducing a new central data structure and more
randomization appeared in randomization appeared in
.Ox 4.4 . .Ox 4.4 .
.Fn mallocarray
.Fn reallocarray
appeared in appeared in
.Ox 5.6 . .Ox 5.6 .

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

@ -1,4 +1,4 @@
/* $OpenBSD: malloc.c,v 1.154 2014/04/21 13:17:32 deraadt Exp $ */
/* $OpenBSD: malloc.c,v 1.155 2014/04/22 14:26:26 tedu Exp $ */
/* /*
* Copyright (c) 2008, 2010, 2011 Otto Moerbeek <otto@drijf.net> * Copyright (c) 2008, 2010, 2011 Otto Moerbeek <otto@drijf.net>
* Copyright (c) 2012 Matthew Dempsky <matthew@openbsd.org> * Copyright (c) 2012 Matthew Dempsky <matthew@openbsd.org>
@ -1433,14 +1433,14 @@ calloc(size_t nmemb, size_t size)
} }
void * void *
mallocarray(size_t nmemb, size_t size)
reallocarray(void *optr, size_t nmemb, size_t size)
{ {
if ((nmemb >= MUL_NO_OVERFLOW || size >= MUL_NO_OVERFLOW) && if ((nmemb >= MUL_NO_OVERFLOW || size >= MUL_NO_OVERFLOW) &&
nmemb > 0 && SIZE_MAX / nmemb < size) { nmemb > 0 && SIZE_MAX / nmemb < size) {
errno = ENOMEM; errno = ENOMEM;
return NULL; return NULL;
} }
return malloc(size * nmemb);
return realloc(optr, size * nmemb);
} }
static void * static void *


Loading…
Cancel
Save