.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $OpenBSD: malloc.3,v 1.111 2017/04/10 06:31:31 jmc Exp $
+.\" $OpenBSD: malloc.3,v 1.112 2017/04/13 18:32:55 otto Exp $
.\"
-.Dd $Mdocdate: April 10 2017 $
+.Dd $Mdocdate: April 13 2017 $
.Dt MALLOC 3
.Os
.Sh NAME
.Fn calloc ,
and
.Fn realloc
-allocate memory space.
+allocate
+.Em objects ,
+regions of memory to store values.
The
.Fn malloc
function allocates uninitialized space for an object of
to
.Fa size
bytes and returns a pointer to the (possibly moved) object.
+If
+.Fa ptr
+is not
+.Dv NULL ,
+it must be a pointer returned by an earlier call to an allocation or
+reallocation function that was not freed in between.
The contents of the object are unchanged up to the lesser
of the new and old sizes.
If the new size is larger, the value of the newly allocated portion
.Fn freezero
function is similar to the
.Fn free
-function except it ensures the memory being deallocated is explicitly
-discarded.
+function except it ensures memory is explicitly discarded.
If
.Fa ptr
is
.Dv NULL ,
the
.Fa size
-argument must be the size of the earlier allocation that returned
-.Fa ptr ,
-otherwise the behaviour is undefined.
+argument must be equal or smaller than the size of the earlier allocation
+that returned
+.Fa ptr .
+.Fn freezero
+guarantees the memory range starting at
+.Fa ptr
+with length
+.Fa size
+is discarded while deallocating the whole object originally allocated.
.Sh RETURN VALUES
Upon successful completion, the allocation functions
return a pointer to the allocated space; otherwise, a
-/* $OpenBSD: malloc.c,v 1.220 2017/04/10 05:45:02 otto Exp $ */
+/* $OpenBSD: malloc.c,v 1.221 2017/04/13 18:32:55 otto Exp $ */
/*
* Copyright (c) 2008, 2010, 2011, 2016 Otto Moerbeek <otto@drijf.net>
* Copyright (c) 2012 Matthew Dempsky <matthew@openbsd.org>
uint32_t chunknum =
find_chunknum(pool, r, p, 0);
- if (info->bits[info->offset + chunknum] !=
+ if (info->bits[info->offset + chunknum] <
argsz)
wrterror(pool, "recorded old size %hu"
- " != %zu",
+ " < %zu",
info->bits[info->offset + chunknum],
argsz);
}
- } else if (argsz != sz - mopts.malloc_guard)
- wrterror(pool, "recorded old size %zu != %zu",
+ } else if (sz - mopts.malloc_guard < argsz)
+ wrterror(pool, "recorded old size %zu < %zu",
sz - mopts.malloc_guard, argsz);
}
if (sz > MALLOC_MAXCHUNK) {