summaryrefslogtreecommitdiff
path: root/static/openbsd/man9/malloc.9
diff options
context:
space:
mode:
authorJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-25 14:02:27 -0400
committerJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-25 14:02:27 -0400
commit6d8bdc65446a704d0750217efd05532fc641ea7d (patch)
tree8ae6d698b3c9801750a8b117b3842fb369872a3a /static/openbsd/man9/malloc.9
parent2f467bd7ff8f8db0dafa40426166491d7f57f368 (diff)
docs: OpenBSD Man Pages Added
Diffstat (limited to 'static/openbsd/man9/malloc.9')
-rw-r--r--static/openbsd/man9/malloc.9403
1 files changed, 403 insertions, 0 deletions
diff --git a/static/openbsd/man9/malloc.9 b/static/openbsd/man9/malloc.9
new file mode 100644
index 00000000..a1fa4be2
--- /dev/null
+++ b/static/openbsd/man9/malloc.9
@@ -0,0 +1,403 @@
+.\" $OpenBSD: malloc.9,v 1.72 2024/01/19 15:10:27 deraadt Exp $
+.\" $NetBSD: malloc.9,v 1.2 1996/10/30 05:29:54 lukem Exp $
+.\"
+.\" Copyright (c) 1996 The NetBSD Foundation, Inc.
+.\" All rights reserved.
+.\"
+.\" This code is derived from software contributed to The NetBSD Foundation
+.\" by Paul Kranenburg.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+.\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+.\" POSSIBILITY OF SUCH DAMAGE.
+.\"
+.Dd $Mdocdate: January 19 2024 $
+.Dt MALLOC 9
+.Os
+.Sh NAME
+.Nm malloc ,
+.Nm mallocarray ,
+.Nm free
+.Nd kernel memory allocator
+.Sh SYNOPSIS
+.In sys/types.h
+.In sys/malloc.h
+.Ft void *
+.Fn malloc "size_t size" "int type" "int flags"
+.Ft void *
+.Fn mallocarray "size_t nmemb" "size_t size" "int type" "int flags"
+.Ft void
+.Fn free "void *addr" "int type" "size_t size"
+.Sh DESCRIPTION
+The
+.Fn malloc
+function allocates uninitialized memory in kernel address space for an
+object whose size is specified by
+.Fa size .
+.Pp
+The
+.Fn mallocarray
+function is the same as
+.Fn malloc ,
+but allocates space for an array of
+.Fa nmemb
+objects and checks for arithmetic overflow.
+.Pp
+The
+.Fn free
+function releases memory at address
+.Fa addr
+that was previously allocated by
+.Fn malloc
+or
+.Fn mallocarray
+for re-use.
+The same object size originally provided to
+.Fn malloc
+should be specified by
+.Fa size ,
+because
+.Fn free
+will operate faster knowing this.
+If tracking the size is difficult, specify
+.Ar size
+as 0.
+If
+.Fa addr
+is a null pointer, no action occurs.
+.Pp
+The
+.Fa flags
+argument affects the operational characteristics of
+.Fn malloc
+and
+.Fn mallocarray
+as follows:
+.Bl -tag -width xxx -offset indent
+.It Dv M_WAITOK
+If memory is currently unavailable,
+.Fn malloc
+may call sleep to wait for resources to be released by other processes.
+.It Dv M_NOWAIT
+Causes
+.Fn malloc
+to return
+.Dv NULL
+if the request cannot be immediately fulfilled due to resource shortage.
+.It Dv M_CANFAIL
+In the
+.Dv M_WAITOK
+case, if not enough memory is available, return
+.Dv NULL
+instead of calling
+.Xr panic 9 .
+If
+.Fn mallocarray
+detects an overflow
+or
+.Fn malloc
+detects an excessive allocation, return
+.Dv NULL
+instead of calling
+.Xr panic 9 .
+.It Dv M_ZERO
+Causes allocated memory to be zeroed.
+.El
+.Pp
+One of
+.Dv M_NOWAIT
+or
+.Dv M_WAITOK
+must be specified via the
+.Fa flags
+argument.
+.Pp
+The
+.Fa type
+argument broadly identifies the kernel subsystem for which the allocated
+memory was needed, and is commonly used to maintain statistics about
+kernel memory usage.
+These statistics can be examined using
+.Xr vmstat 8
+or
+.Xr systat 1
+if either of the kernel
+.Xr options 4
+.Cm KMEMSTATS
+or
+.Cm DEBUG
+are enabled.
+.Pp
+The following types are currently defined:
+.Pp
+.Bl -tag -offset indent -width XXXXXXXXXXXXXX -compact
+.\" START DEFINES sys/malloc.h (M_FREE,M_LAST)
+.It Dv M_DEVBUF
+Device driver memory.
+.It Dv M_PCB
+Protocol control blocks.
+.It Dv M_RTABLE
+Routing tables.
+.It Dv M_PF
+Packet filter structures.
+.It Dv M_IFADDR
+Interface addresses.
+.It Dv M_IFGROUP
+Interface groups.
+.It Dv M_SYSCTL
+Sysctl persistent buffers.
+.It Dv M_COUNTERS
+Per-CPU counters via
+.Xr counters_alloc 9 .
+.It Dv M_IOCTLOPS
+Ioctl data buffers.
+.It Dv M_IOV
+Large IOVs.
+.It Dv M_MOUNT
+VFS mount structs.
+.It Dv M_NFSREQ
+NFS request headers.
+.It Dv M_NFSMNT
+NFS mount structures.
+.It Dv M_LOG
+Messages in kernel log stash.
+.It Dv M_VNODE
+Dynamically allocated vnodes.
+.It Dv M_DQUOT
+UFS quota entries.
+.It Dv M_UFSMNT
+UFS mount structures.
+.It Dv M_SHM
+SVID compatible shared memory segments.
+.It Dv M_VMMAP
+VM map structures.
+.It Dv M_SEM
+SVID compatible semaphores.
+.It Dv M_DIRHASH
+UFS directory hash structures.
+.It Dv M_ACPI
+ACPI structures.
+.It Dv M_VMPMAP
+VM pmap data.
+.It Dv M_FILEDESC
+Open file descriptor tables.
+.It Dv M_SIGIO
+Sigio structures.
+.It Dv M_PROC
+Proc structures.
+.It Dv M_SUBPROC
+Proc sub-structures.
+.It Dv M_MFSNODE
+MFS vnode private part.
+.It Dv M_NETADDR
+Export host address structures.
+.It Dv M_NFSSVC
+NFS server structures.
+.It Dv M_NFSD
+NFS server daemon structures.
+.It Dv M_IPMOPTS
+Internet multicast options.
+.It Dv M_IPMADDR
+Internet multicast addresses.
+.It Dv M_IFMADDR
+Link-level multicast addresses.
+.It Dv M_MRTABLE
+Multicast routing tables.
+.It Dv M_ISOFSMNT
+ISOFS mount structures.
+.It Dv M_ISOFSNODE
+ISOFS vnode private part.
+.It Dv M_MSDOSFSMNT
+MSDOS FS mount structures.
+.It Dv M_MSDOSFSFAT
+MSDOS FS FAT tables.
+.It Dv M_MSDOSFSNODE
+MSDOS FS vnode private part.
+.It Dv M_TTYS
+Allocated tty structures.
+.It Dv M_EXEC
+Argument lists & other mem used by exec.
+.It Dv M_MISCFSMNT
+Miscellaneous FS mount structures.
+.It Dv M_FUSEFS
+FUSE FS mount structures.
+.It Dv M_PINSYSCALL
+.Xr pinsyscalls 2
+related data.
+.It Dv M_PFKEY
+Pfkey data.
+.It Dv M_TDB
+Transforms database.
+.It Dv M_XDATA
+IPsec data.
+.It Dv M_PAGEDEP
+File page dependencies.
+.It Dv M_INODEDEP
+Inode dependencies.
+.It Dv M_NEWBLK
+New block allocation.
+.It Dv M_INDIRDEP
+Indirect block dependencies.
+.It Dv M_VMSWAP
+VM swap structures.
+.It Dv M_UVMAMAP
+UVM amap and related.
+.It Dv M_UVMAOBJ
+UVM aobj and related.
+.It Dv M_USB
+USB general.
+.It Dv M_USBDEV
+USB device driver.
+.It Dv M_USBHC
+USB host controller.
+.It Dv M_WITNESS
+.Xr witness 4
+memory.
+.It Dv M_MEMDESC
+Memory range.
+.It Dv M_CRYPTO_DATA
+.Xr crypto 9
+data buffers.
+.It Dv M_CREDENTIALS
+.Xr ipsec 4
+related credentials.
+.It Dv M_IP6OPT
+IPv6 options.
+.It Dv M_IP6NDP
+IPv6 Neighbor Discovery structures.
+.It Dv M_TEMP
+Miscellaneous temporary data buffers.
+.It Dv M_NTFSMNT
+NTFS mount structures.
+.It Dv M_NTFSNTNODE
+NTFS ntnode information.
+.It Dv M_NTFSFNODE
+NTFS fnode information.
+.It Dv M_NTFSDIR
+NTFS directory buffers.
+.It Dv M_NTFSNTHASH
+NTFS ntnode hash tables.
+.It Dv M_NTFSNTVATTR
+NTFS file attribute information.
+.It Dv M_NTFSRDATA
+NTFS resident data.
+.It Dv M_NTFSDECOMP
+NTFS decompression temporary storage.
+.It Dv M_NTFSRUN
+NTFS vrun storage.
+.It Dv M_KEVENT
+.Xr kqueue 2
+data structures.
+.It Dv M_SYNCACHE
+SYN cache hash array.
+.It Dv M_UDFMOUNT
+UDF mount structures.
+.It Dv M_UDFFENTRY
+UDF file entries.
+.It Dv M_UDFFID
+UDF file IDs.
+.It Dv M_AGP
+AGP memory.
+.It Dv M_DRM
+Direct Rendering Manager.
+.\" END DEFINES
+.El
+.Sh CONTEXT
+.Fn malloc
+and
+.Fn mallocarray
+can be called during autoconf, from process context, or from interrupt context
+if
+.Dv M_NOWAIT
+is passed via
+.Fa flags .
+They can't be called from interrupt context if
+.Dv M_WAITOK
+is passed via
+.Fa flags .
+.Pp
+.Fn free
+can be called during autoconf, from process context, or from interrupt context.
+.Sh RETURN VALUES
+.Fn malloc
+and
+.Fn mallocarray
+return a kernel virtual address that is suitably aligned for storage of
+any type of object.
+.Sh DIAGNOSTICS
+A kernel compiled with the
+.Dv DIAGNOSTIC
+configuration option attempts to detect memory corruption caused by
+such things as writing outside the allocated area and unbalanced calls to
+.Fn malloc
+or
+.Fn mallocarray ,
+and
+.Fn free .
+Failing consistency checks will cause a panic or a system console message:
+.Pp
+.Bl -bullet -offset indent -compact
+.It
+panic:
+.Dq malloc: bogus type
+.It
+panic:
+.Dq malloc: out of space in kmem_map
+.It
+panic:
+.Dq malloc: allocation too large
+.It
+panic:
+.Dq malloc: wrong bucket
+.It
+panic:
+.Dq malloc: lost data
+.It
+panic:
+.Dq mallocarray: overflow
+.It
+panic:
+.Dq free: unaligned addr
+.It
+panic:
+.Dq free: duplicated free
+.It
+panic:
+.Dq free: multiple frees
+.It
+panic:
+.Dq free: non-malloced addr
+.It
+panic:
+.Dq free: size too large
+.It
+panic:
+.Dq free: size too small
+.It
+panic:
+.Dq kmeminit: minbucket too small/struct freelist too big
+.It
+.Dq multiply freed item Aq addr
+.It
+.Dq Data modified on freelist: Aq data object description
+.El
+.Sh SEE ALSO
+.Xr systat 1 ,
+.Xr vmstat 8