memguard.9 (162404) | memguard.9 (211194) |
---|---|
1.\" Copyright (c) 2005 Christian Brueffer 2.\" All rights reserved. 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 1. Redistributions of source code must retain the above copyright 8.\" notice, this list of conditions and the following disclaimer. --- 8 unchanged lines hidden (view full) --- 17.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23.\" SUCH DAMAGE. 24.\" | 1.\" Copyright (c) 2005 Christian Brueffer 2.\" All rights reserved. 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 1. Redistributions of source code must retain the above copyright 8.\" notice, this list of conditions and the following disclaimer. --- 8 unchanged lines hidden (view full) --- 17.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23.\" SUCH DAMAGE. 24.\" |
25.\" $FreeBSD: head/share/man/man9/memguard.9 162404 2006-09-18 15:24:20Z ru $ | 25.\" $FreeBSD: head/share/man/man9/memguard.9 211194 2010-08-11 22:10:37Z mdf $ |
26.\" | 26.\" |
27.Dd January 31, 2006 | 27.Dd August 2, 2010 |
28.Dt MEMGUARD 9 29.Os 30.Sh NAME 31.Nm MemGuard 32.Nd "memory allocator for debugging purposes" 33.Sh SYNOPSIS 34.Cd "options DEBUG_MEMGUARD" 35.Sh DESCRIPTION 36.Nm 37is a simple and small replacement memory allocator designed 38to help detect tamper-after-free scenarios. 39These problems are more and more common and likely with 40multithreaded kernels where race conditions are more prevalent. 41.Pp 42Currently, 43.Nm | 28.Dt MEMGUARD 9 29.Os 30.Sh NAME 31.Nm MemGuard 32.Nd "memory allocator for debugging purposes" 33.Sh SYNOPSIS 34.Cd "options DEBUG_MEMGUARD" 35.Sh DESCRIPTION 36.Nm 37is a simple and small replacement memory allocator designed 38to help detect tamper-after-free scenarios. 39These problems are more and more common and likely with 40multithreaded kernels where race conditions are more prevalent. 41.Pp 42Currently, 43.Nm |
44can only take over | 44can take over |
45.Fn malloc , 46.Fn realloc 47and 48.Fn free | 45.Fn malloc , 46.Fn realloc 47and 48.Fn free |
49for a particular malloc type. | 49for a single malloc type. 50.Nm 51can also guard all allocations larger than 52.Dv PAGE_SIZE , 53and can guard a random fraction of all allocations. 54There is also a knob to prevent allocations smaller than a specified 55size from being guarded, to limit memory waste. |
50.Sh EXAMPLES 51To use 52.Nm | 56.Sh EXAMPLES 57To use 58.Nm |
53for memory type compiled into the kernel, one has to add the 54following line to the | 59for a memory type, either add an entry to |
55.Pa /boot/loader.conf : 56.Bd -literal -offset indent 57vm.memguard.desc=<memory_type> 58.Ed 59.Pp | 60.Pa /boot/loader.conf : 61.Bd -literal -offset indent 62vm.memguard.desc=<memory_type> 63.Ed 64.Pp |
60Where 61.Ar memory_type 62is a short description of memory type to monitor. 63The short description of memory type is the second argument to 64.Xr MALLOC_DEFINE 9 , 65so one has to find it in the kernel source. 66.Pp 67To use 68.Nm 69for memory type defined in a kernel module, one has to set | 65Or set the |
70.Va vm.memguard.desc 71.Xr sysctl 8 | 66.Va vm.memguard.desc 67.Xr sysctl 8 |
72variable before loading the module: | 68variable at run-time: |
73.Bd -literal -offset indent 74sysctl vm.memguard.desc=<memory_type> 75.Ed 76.Pp | 69.Bd -literal -offset indent 70sysctl vm.memguard.desc=<memory_type> 71.Ed 72.Pp |
73Where 74.Ar memory_type 75is a short description of the memory type to monitor. 76Only allocations from that 77.Ar memory_type 78made after 79.Va vm.memguard.desc 80is set will potentially be guarded. 81If 82.Va vm.memguard.desc 83is modified at run-time then only allocations of the new 84.Ar memory_type 85will potentially be guarded once the 86.Xr sysctl 8 87is set. 88Existing guarded allocations will still be properly released by 89.Xr free 9 . 90.Pp 91The short description of a 92.Xr malloc 9 93type is the second argument to 94.Xr MALLOC_DEFINE 9 , 95so one has to find it in the kernel source. 96.Pp |
|
77The 78.Va vm.memguard.divisor | 97The 98.Va vm.memguard.divisor |
79boot-time tunable is used to scale how much of 80.Va kmem_map 81one wants to allocate for 82.Nm . 83The default is 10, so 84.Va kmem_size Ns /10 85bytes will be used. 86The 87.Va kmem_size 88value can be obtained via the 89.Va vm.kmem_size 90.Xr sysctl 8 91variable. | 99boot-time tunable is used to scale how much of the system's physical 100memory 101.Nm 102is allowed to consume. 103The default is 10, so up to 104.Va cnt.v_page_count Ns /10 105pages can be used. 106.Nm 107will reserve 108.Va vm_kmem_max 109/ 110.Va vm.memguard.divisor 111bytes of virtual address space, limited by twice the physical memory 112size. 113The physical limit is reported as 114.Va vm.memguard.phys_limit 115and the virtual space reserved for 116.Nm 117is reported as 118.Va vm.memguard.mapsize . 119.Pp 120.Nm 121will not do page promotions for any allocation smaller than 122.Va vm.memguard.minsize 123bytes. 124The default is 0, meaning all allocations can potentially be guarded. 125.Nm 126can guard sufficiently large allocations randomly, with average 127frequency of every one in 100000 / 128.Va vm.memguard.frequency 129allocations. 130The default is 0, meaning no allocations are randomly guarded. 131.Pp 132.Nm 133can optionally add unmapped guard pages around each allocation to 134detect overflow and underflow, if 135.Va vm.memguard.options 136has the 1 bit set. 137This option is enabled by default. 138.Nm 139will optionally guard all allocations of 140.Dv PAGE_SIZE 141or larger if 142.Va vm.memguard.options 143has the 2 bit set. 144This option is off by default. |
92.Sh SEE ALSO 93.Xr sysctl 8 , 94.Xr vmstat 8 , 95.Xr contigmalloc 9 , 96.Xr malloc 9 , 97.Xr redzone 9 98.Sh HISTORY 99.Nm 100first appeared in 101.Fx 6.0 . 102.Sh AUTHORS 103.An -nosplit 104.Nm | 145.Sh SEE ALSO 146.Xr sysctl 8 , 147.Xr vmstat 8 , 148.Xr contigmalloc 9 , 149.Xr malloc 9 , 150.Xr redzone 9 151.Sh HISTORY 152.Nm 153first appeared in 154.Fx 6.0 . 155.Sh AUTHORS 156.An -nosplit 157.Nm |
105was written by | 158was originally written by |
106.An Bosko Milekic Aq bmilekic@FreeBSD.org . | 159.An Bosko Milekic Aq bmilekic@FreeBSD.org . |
107This manual page was written by | 160This manual page was originally written by |
108.An Christian Brueffer Aq brueffer@FreeBSD.org . | 161.An Christian Brueffer Aq brueffer@FreeBSD.org . |
162Additions have been made by 163.An Matthew Fleming Aq mdf@FreeBSD.org 164to both the implementation and the documentation. |
|
109.Sh BUGS 110Currently, it is not possible to override UMA 111.Xr zone 9 112allocations. | 165.Sh BUGS 166Currently, it is not possible to override UMA 167.Xr zone 9 168allocations. |