xref: /openbsd/share/man/man9/malloc.9 (revision 4bdff4be)
1.\"	$OpenBSD: malloc.9,v 1.72 2024/01/19 15:10:27 deraadt Exp $
2.\"	$NetBSD: malloc.9,v 1.2 1996/10/30 05:29:54 lukem Exp $
3.\"
4.\" Copyright (c) 1996 The NetBSD Foundation, Inc.
5.\" All rights reserved.
6.\"
7.\" This code is derived from software contributed to The NetBSD Foundation
8.\" by Paul Kranenburg.
9.\"
10.\" Redistribution and use in source and binary forms, with or without
11.\" modification, are permitted provided that the following conditions
12.\" are met:
13.\" 1. Redistributions of source code must retain the above copyright
14.\"    notice, this list of conditions and the following disclaimer.
15.\" 2. Redistributions in binary form must reproduce the above copyright
16.\"    notice, this list of conditions and the following disclaimer in the
17.\"    documentation and/or other materials provided with the distribution.
18.\"
19.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
23.\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29.\" POSSIBILITY OF SUCH DAMAGE.
30.\"
31.Dd $Mdocdate: January 19 2024 $
32.Dt MALLOC 9
33.Os
34.Sh NAME
35.Nm malloc ,
36.Nm mallocarray ,
37.Nm free
38.Nd kernel memory allocator
39.Sh SYNOPSIS
40.In sys/types.h
41.In sys/malloc.h
42.Ft void *
43.Fn malloc "size_t size" "int type" "int flags"
44.Ft void *
45.Fn mallocarray "size_t nmemb" "size_t size" "int type" "int flags"
46.Ft void
47.Fn free "void *addr" "int type" "size_t size"
48.Sh DESCRIPTION
49The
50.Fn malloc
51function allocates uninitialized memory in kernel address space for an
52object whose size is specified by
53.Fa size .
54.Pp
55The
56.Fn mallocarray
57function is the same as
58.Fn malloc ,
59but allocates space for an array of
60.Fa nmemb
61objects and checks for arithmetic overflow.
62.Pp
63The
64.Fn free
65function releases memory at address
66.Fa addr
67that was previously allocated by
68.Fn malloc
69or
70.Fn mallocarray
71for re-use.
72The same object size originally provided to
73.Fn malloc
74should be specified by
75.Fa size ,
76because
77.Fn free
78will operate faster knowing this.
79If tracking the size is difficult, specify
80.Ar size
81as 0.
82If
83.Fa addr
84is a null pointer, no action occurs.
85.Pp
86The
87.Fa flags
88argument affects the operational characteristics of
89.Fn malloc
90and
91.Fn mallocarray
92as follows:
93.Bl -tag -width xxx -offset indent
94.It Dv M_WAITOK
95If memory is currently unavailable,
96.Fn malloc
97may call sleep to wait for resources to be released by other processes.
98.It Dv M_NOWAIT
99Causes
100.Fn malloc
101to return
102.Dv NULL
103if the request cannot be immediately fulfilled due to resource shortage.
104.It Dv M_CANFAIL
105In the
106.Dv M_WAITOK
107case, if not enough memory is available, return
108.Dv NULL
109instead of calling
110.Xr panic 9 .
111If
112.Fn mallocarray
113detects an overflow
114or
115.Fn malloc
116detects an excessive allocation, return
117.Dv NULL
118instead of calling
119.Xr panic 9 .
120.It Dv M_ZERO
121Causes allocated memory to be zeroed.
122.El
123.Pp
124One of
125.Dv M_NOWAIT
126or
127.Dv M_WAITOK
128must be specified via the
129.Fa flags
130argument.
131.Pp
132The
133.Fa type
134argument broadly identifies the kernel subsystem for which the allocated
135memory was needed, and is commonly used to maintain statistics about
136kernel memory usage.
137These statistics can be examined using
138.Xr vmstat 8
139or
140.Xr systat 1
141if either of the kernel
142.Xr options 4
143.Cm KMEMSTATS
144or
145.Cm DEBUG
146are enabled.
147.Pp
148The following types are currently defined:
149.Pp
150.Bl -tag -offset indent -width XXXXXXXXXXXXXX -compact
151.\"	START DEFINES	sys/malloc.h	(M_FREE,M_LAST)
152.It Dv M_DEVBUF
153Device driver memory.
154.It Dv M_PCB
155Protocol control blocks.
156.It Dv M_RTABLE
157Routing tables.
158.It Dv M_PF
159Packet filter structures.
160.It Dv M_IFADDR
161Interface addresses.
162.It Dv M_IFGROUP
163Interface groups.
164.It Dv M_SYSCTL
165Sysctl persistent buffers.
166.It Dv M_COUNTERS
167Per-CPU counters via
168.Xr counters_alloc 9 .
169.It Dv M_IOCTLOPS
170Ioctl data buffers.
171.It Dv M_IOV
172Large IOVs.
173.It Dv M_MOUNT
174VFS mount structs.
175.It Dv M_NFSREQ
176NFS request headers.
177.It Dv M_NFSMNT
178NFS mount structures.
179.It Dv M_LOG
180Messages in kernel log stash.
181.It Dv M_VNODE
182Dynamically allocated vnodes.
183.It Dv M_DQUOT
184UFS quota entries.
185.It Dv M_UFSMNT
186UFS mount structures.
187.It Dv M_SHM
188SVID compatible shared memory segments.
189.It Dv M_VMMAP
190VM map structures.
191.It Dv M_SEM
192SVID compatible semaphores.
193.It Dv M_DIRHASH
194UFS directory hash structures.
195.It Dv M_ACPI
196ACPI structures.
197.It Dv M_VMPMAP
198VM pmap data.
199.It Dv M_FILEDESC
200Open file descriptor tables.
201.It Dv M_SIGIO
202Sigio structures.
203.It Dv M_PROC
204Proc structures.
205.It Dv M_SUBPROC
206Proc sub-structures.
207.It Dv M_MFSNODE
208MFS vnode private part.
209.It Dv M_NETADDR
210Export host address structures.
211.It Dv M_NFSSVC
212NFS server structures.
213.It Dv M_NFSD
214NFS server daemon structures.
215.It Dv M_IPMOPTS
216Internet multicast options.
217.It Dv M_IPMADDR
218Internet multicast addresses.
219.It Dv M_IFMADDR
220Link-level multicast addresses.
221.It Dv M_MRTABLE
222Multicast routing tables.
223.It Dv M_ISOFSMNT
224ISOFS mount structures.
225.It Dv M_ISOFSNODE
226ISOFS vnode private part.
227.It Dv M_MSDOSFSMNT
228MSDOS FS mount structures.
229.It Dv M_MSDOSFSFAT
230MSDOS FS FAT tables.
231.It Dv M_MSDOSFSNODE
232MSDOS FS vnode private part.
233.It Dv M_TTYS
234Allocated tty structures.
235.It Dv M_EXEC
236Argument lists & other mem used by exec.
237.It Dv M_MISCFSMNT
238Miscellaneous FS mount structures.
239.It Dv M_FUSEFS
240FUSE FS mount structures.
241.It Dv M_PINSYSCALL
242.Xr pinsyscalls 2
243related data.
244.It Dv M_PFKEY
245Pfkey data.
246.It Dv M_TDB
247Transforms database.
248.It Dv M_XDATA
249IPsec data.
250.It Dv M_PAGEDEP
251File page dependencies.
252.It Dv M_INODEDEP
253Inode dependencies.
254.It Dv M_NEWBLK
255New block allocation.
256.It Dv M_INDIRDEP
257Indirect block dependencies.
258.It Dv M_VMSWAP
259VM swap structures.
260.It Dv M_UVMAMAP
261UVM amap and related.
262.It Dv M_UVMAOBJ
263UVM aobj and related.
264.It Dv M_USB
265USB general.
266.It Dv M_USBDEV
267USB device driver.
268.It Dv M_USBHC
269USB host controller.
270.It Dv M_WITNESS
271.Xr witness 4
272memory.
273.It Dv M_MEMDESC
274Memory range.
275.It Dv M_CRYPTO_DATA
276.Xr crypto 9
277data buffers.
278.It Dv M_CREDENTIALS
279.Xr ipsec 4
280related credentials.
281.It Dv M_IP6OPT
282IPv6 options.
283.It Dv M_IP6NDP
284IPv6 Neighbor Discovery structures.
285.It Dv M_TEMP
286Miscellaneous temporary data buffers.
287.It Dv M_NTFSMNT
288NTFS mount structures.
289.It Dv M_NTFSNTNODE
290NTFS ntnode information.
291.It Dv M_NTFSFNODE
292NTFS fnode information.
293.It Dv M_NTFSDIR
294NTFS directory buffers.
295.It Dv M_NTFSNTHASH
296NTFS ntnode hash tables.
297.It Dv M_NTFSNTVATTR
298NTFS file attribute information.
299.It Dv M_NTFSRDATA
300NTFS resident data.
301.It Dv M_NTFSDECOMP
302NTFS decompression temporary storage.
303.It Dv M_NTFSRUN
304NTFS vrun storage.
305.It Dv M_KEVENT
306.Xr kqueue 2
307data structures.
308.It Dv M_SYNCACHE
309SYN cache hash array.
310.It Dv M_UDFMOUNT
311UDF mount structures.
312.It Dv M_UDFFENTRY
313UDF file entries.
314.It Dv M_UDFFID
315UDF file IDs.
316.It Dv M_AGP
317AGP memory.
318.It Dv M_DRM
319Direct Rendering Manager.
320.\"	END DEFINES
321.El
322.Sh CONTEXT
323.Fn malloc
324and
325.Fn mallocarray
326can be called during autoconf, from process context, or from interrupt context
327if
328.Dv M_NOWAIT
329is passed via
330.Fa flags .
331They can't be called from interrupt context if
332.Dv M_WAITOK
333is passed via
334.Fa flags .
335.Pp
336.Fn free
337can be called during autoconf, from process context, or from interrupt context.
338.Sh RETURN VALUES
339.Fn malloc
340and
341.Fn mallocarray
342return a kernel virtual address that is suitably aligned for storage of
343any type of object.
344.Sh DIAGNOSTICS
345A kernel compiled with the
346.Dv DIAGNOSTIC
347configuration option attempts to detect memory corruption caused by
348such things as writing outside the allocated area and unbalanced calls to
349.Fn malloc
350or
351.Fn mallocarray ,
352and
353.Fn free .
354Failing consistency checks will cause a panic or a system console message:
355.Pp
356.Bl -bullet -offset indent -compact
357.It
358panic:
359.Dq malloc: bogus type
360.It
361panic:
362.Dq malloc: out of space in kmem_map
363.It
364panic:
365.Dq malloc: allocation too large
366.It
367panic:
368.Dq malloc: wrong bucket
369.It
370panic:
371.Dq malloc: lost data
372.It
373panic:
374.Dq mallocarray: overflow
375.It
376panic:
377.Dq free: unaligned addr
378.It
379panic:
380.Dq free: duplicated free
381.It
382panic:
383.Dq free: multiple frees
384.It
385panic:
386.Dq free: non-malloced addr
387.It
388panic:
389.Dq free: size too large
390.It
391panic:
392.Dq free: size too small
393.It
394panic:
395.Dq kmeminit: minbucket too small/struct freelist too big
396.It
397.Dq multiply freed item Aq addr
398.It
399.Dq Data modified on freelist: Aq data object description
400.El
401.Sh SEE ALSO
402.Xr systat 1 ,
403.Xr vmstat 8
404