]>
Commit | Line | Data |
---|---|---|
ec8f24b7 | 1 | # SPDX-License-Identifier: GPL-2.0-only |
eefa864b JK |
2 | config PAGE_EXTENSION |
3 | bool "Extend memmap on extra space for more information on page" | |
a7f7f624 | 4 | help |
eefa864b JK |
5 | Extend memmap on extra space for more information on page. This |
6 | could be used for debugging features that need to insert extra | |
7 | field for every page. This extension enables us to save memory | |
8 | by not allocating this extra memory according to boottime | |
9 | configuration. | |
10 | ||
ee3b4290 AM |
11 | config DEBUG_PAGEALLOC |
12 | bool "Debug page memory allocations" | |
7bc32f6f AM |
13 | depends on DEBUG_KERNEL |
14 | depends on !HIBERNATION || ARCH_SUPPORTS_DEBUG_PAGEALLOC && !PPC && !SPARC | |
7bc32f6f | 15 | select PAGE_POISONING if !ARCH_SUPPORTS_DEBUG_PAGEALLOC |
a7f7f624 | 16 | help |
ee3b4290 | 17 | Unmap pages from the kernel linear mapping after free_pages(). |
ea6eabb0 CB |
18 | Depending on runtime enablement, this results in a small or large |
19 | slowdown, but helps to find certain types of memory corruption. | |
ee3b4290 | 20 | |
4462b32c VB |
21 | Also, the state of page tracking structures is checked more often as |
22 | pages are being allocated and freed, as unexpected state changes | |
23 | often happen for same reasons as memory corruption (e.g. double free, | |
8974558f VB |
24 | use-after-free). The error reports for these checks can be augmented |
25 | with stack traces of last allocation and freeing of the page, when | |
26 | PAGE_OWNER is also selected and enabled on boot. | |
4462b32c | 27 | |
7bc32f6f AM |
28 | For architectures which don't enable ARCH_SUPPORTS_DEBUG_PAGEALLOC, |
29 | fill the pages with poison patterns after free_pages() and verify | |
4462b32c VB |
30 | the patterns before alloc_pages(). Additionally, this option cannot |
31 | be enabled in combination with hibernation as that would result in | |
32 | incorrect warnings of memory corruption after a resume because free | |
33 | pages are not saved to the suspend image. | |
7bc32f6f | 34 | |
ea6eabb0 CB |
35 | By default this option will have a small overhead, e.g. by not |
36 | allowing the kernel mapping to be backed by large pages on some | |
37 | architectures. Even bigger overhead comes when the debugging is | |
38 | enabled by DEBUG_PAGEALLOC_ENABLE_DEFAULT or the debug_pagealloc | |
39 | command line parameter. | |
40 | ||
41 | config DEBUG_PAGEALLOC_ENABLE_DEFAULT | |
42 | bool "Enable debug page memory allocations by default?" | |
ea6eabb0 | 43 | depends on DEBUG_PAGEALLOC |
a7f7f624 | 44 | help |
ea6eabb0 CB |
45 | Enable debug page memory allocations by default? This value |
46 | can be overridden by debug_pagealloc=off|on. | |
47 | ||
0710d012 VB |
48 | config DEBUG_SLAB |
49 | bool "Debug slab memory allocations" | |
50 | depends on DEBUG_KERNEL && SLAB | |
51 | help | |
52 | Say Y here to have the kernel do limited verification on memory | |
53 | allocation as well as poisoning memory on free to catch use of freed | |
54 | memory. This can make kmalloc/kfree-intensive workloads much slower. | |
55 | ||
56 | config SLUB_DEBUG | |
57 | default y | |
58 | bool "Enable SLUB debugging support" if EXPERT | |
e240e53a | 59 | depends on SLUB && SYSFS && !SLUB_TINY |
8291eaaf | 60 | select STACKDEPOT if STACKTRACE_SUPPORT |
0710d012 VB |
61 | help |
62 | SLUB has extensive debug support features. Disabling these can | |
220a20ad VY |
63 | result in significant savings in code size. While /sys/kernel/slab |
64 | will still exist (with SYSFS enabled), it will not provide e.g. cache | |
65 | validation. | |
0710d012 VB |
66 | |
67 | config SLUB_DEBUG_ON | |
68 | bool "SLUB debugging on by default" | |
69 | depends on SLUB && SLUB_DEBUG | |
8291eaaf | 70 | select STACKDEPOT_ALWAYS_INIT if STACKTRACE_SUPPORT |
0710d012 VB |
71 | default n |
72 | help | |
73 | Boot with debugging on by default. SLUB boots by default with | |
74 | the runtime debug capabilities switched off. Enabling this is | |
75 | equivalent to specifying the "slub_debug" parameter on boot. | |
76 | There is no support for more fine grained debug control like | |
77 | possible with slub_debug=xxx. SLUB debugging may be switched | |
78 | off in a kernel built with CONFIG_SLUB_DEBUG_ON by specifying | |
79 | "slub_debug=-". | |
80 | ||
8aa49762 CD |
81 | config PAGE_OWNER |
82 | bool "Track page owner" | |
83 | depends on DEBUG_KERNEL && STACKTRACE_SUPPORT | |
84 | select DEBUG_FS | |
85 | select STACKTRACE | |
86 | select STACKDEPOT | |
87 | select PAGE_EXTENSION | |
88 | help | |
89 | This keeps track of what call chain is the owner of a page, may | |
90 | help to find bare alloc_page(s) leaks. Even if you include this | |
91 | feature on your build, it is disabled in default. You should pass | |
92 | "page_owner=on" to boot parameter in order to enable it. Eats | |
799fb82a | 93 | a fair amount of memory if enabled. See tools/mm/page_owner_sort.c |
8aa49762 CD |
94 | for user-space helper. |
95 | ||
96 | If unsure, say N. | |
97 | ||
df4e817b PT |
98 | config PAGE_TABLE_CHECK |
99 | bool "Check for invalid mappings in user page tables" | |
100 | depends on ARCH_SUPPORTS_PAGE_TABLE_CHECK | |
81a31a86 | 101 | depends on EXCLUSIVE_SYSTEM_RAM |
df4e817b PT |
102 | select PAGE_EXTENSION |
103 | help | |
104 | Check that anonymous page is not being mapped twice with read write | |
105 | permissions. Check that anonymous and file pages are not being | |
106 | erroneously shared. Since the checking is performed at the time | |
107 | entries are added and removed to user page tables, leaking, corruption | |
108 | and double mapping problems are detected synchronously. | |
109 | ||
110 | If unsure say "n". | |
111 | ||
112 | config PAGE_TABLE_CHECK_ENFORCED | |
113 | bool "Enforce the page table checking by default" | |
114 | depends on PAGE_TABLE_CHECK | |
115 | help | |
116 | Always enable page table checking. By default the page table checking | |
117 | is disabled, and can be optionally enabled via page_table_check=on | |
118 | kernel parameter. This config enforces that page table check is always | |
119 | enabled. | |
120 | ||
121 | If unsure say "n". | |
122 | ||
6a11f75b | 123 | config PAGE_POISONING |
8823b1db | 124 | bool "Poison pages after freeing" |
a7f7f624 | 125 | help |
8823b1db LA |
126 | Fill the pages with poison patterns after free_pages() and verify |
127 | the patterns before alloc_pages. The filling of the memory helps | |
128 | reduce the risk of information leaks from freed data. This does | |
8c9a134c KC |
129 | have a potential performance impact if enabled with the |
130 | "page_poison=1" kernel boot option. | |
8823b1db LA |
131 | |
132 | Note that "poison" here is not the same thing as the "HWPoison" | |
133 | for CONFIG_MEMORY_FAILURE. This is software poisoning only. | |
134 | ||
8f424750 VB |
135 | If you are only interested in sanitization of freed pages without |
136 | checking the poison pattern on alloc, you can boot the kernel with | |
137 | "init_on_free=1" instead of enabling this. | |
8823b1db | 138 | |
8f424750 | 139 | If unsure, say N |
1414c7f4 | 140 | |
95813b8f JK |
141 | config DEBUG_PAGE_REF |
142 | bool "Enable tracepoint to track down page reference manipulation" | |
143 | depends on DEBUG_KERNEL | |
144 | depends on TRACEPOINTS | |
a7f7f624 | 145 | help |
95813b8f JK |
146 | This is a feature to add tracepoint for tracking down page reference |
147 | manipulation. This tracking is useful to diagnose functional failure | |
148 | due to migration failures caused by page reference mismatches. Be | |
149 | careful when enabling this feature because it adds about 30 KB to the | |
150 | kernel code. However the runtime performance overhead is virtually | |
151 | nil until the tracepoints are actually enabled. | |
2959a5f7 JP |
152 | |
153 | config DEBUG_RODATA_TEST | |
154 | bool "Testcase for the marking rodata read-only" | |
155 | depends on STRICT_KERNEL_RWX | |
a7f7f624 | 156 | help |
2959a5f7 | 157 | This option enables a testcase for the setting rodata read-only. |
30d621f6 | 158 | |
375d315c ZL |
159 | config ARCH_HAS_DEBUG_WX |
160 | bool | |
161 | ||
162 | config DEBUG_WX | |
163 | bool "Warn on W+X mappings at boot" | |
164 | depends on ARCH_HAS_DEBUG_WX | |
165 | depends on MMU | |
166 | select PTDUMP_CORE | |
167 | help | |
168 | Generate a warning if any W+X mappings are found at boot. | |
169 | ||
170 | This is useful for discovering cases where the kernel is leaving W+X | |
171 | mappings after applying NX, as such mappings are a security risk. | |
172 | ||
173 | Look for a message in dmesg output like this: | |
174 | ||
175 | <arch>/mm: Checked W+X mappings: passed, no W+X pages found. | |
176 | ||
177 | or like this, if the check failed: | |
178 | ||
179 | <arch>/mm: Checked W+X mappings: failed, <N> W+X pages found. | |
180 | ||
181 | Note that even if the check fails, your kernel is possibly | |
182 | still fine, as W+X mappings are not a security hole in | |
183 | themselves, what they do is that they make the exploitation | |
184 | of other unfixed kernel bugs easier. | |
185 | ||
186 | There is no runtime or memory usage effect of this option | |
187 | once the kernel has booted up - it's a one time check. | |
188 | ||
189 | If in doubt, say "Y". | |
190 | ||
30d621f6 SP |
191 | config GENERIC_PTDUMP |
192 | bool | |
193 | ||
194 | config PTDUMP_CORE | |
195 | bool | |
196 | ||
197 | config PTDUMP_DEBUGFS | |
198 | bool "Export kernel pagetable layout to userspace via debugfs" | |
199 | depends on DEBUG_KERNEL | |
200 | depends on DEBUG_FS | |
201 | depends on GENERIC_PTDUMP | |
202 | select PTDUMP_CORE | |
203 | help | |
204 | Say Y here if you want to show the kernel pagetable layout in a | |
205 | debugfs file. This information is only useful for kernel developers | |
206 | who are working in architecture specific areas of the kernel. | |
207 | It is probably not a good idea to enable this feature in a production | |
208 | kernel. | |
209 | ||
210 | If in doubt, say N. | |
b2db9ef2 ZH |
211 | |
212 | config HAVE_DEBUG_KMEMLEAK | |
213 | bool | |
214 | ||
215 | config DEBUG_KMEMLEAK | |
216 | bool "Kernel memory leak detector" | |
217 | depends on DEBUG_KERNEL && HAVE_DEBUG_KMEMLEAK | |
218 | select DEBUG_FS | |
219 | select STACKTRACE if STACKTRACE_SUPPORT | |
220 | select KALLSYMS | |
221 | select CRC32 | |
222 | select STACKDEPOT | |
223 | select STACKDEPOT_ALWAYS_INIT if !DEBUG_KMEMLEAK_DEFAULT_OFF | |
224 | help | |
225 | Say Y here if you want to enable the memory leak | |
226 | detector. The memory allocation/freeing is traced in a way | |
227 | similar to the Boehm's conservative garbage collector, the | |
228 | difference being that the orphan objects are not freed but | |
229 | only shown in /sys/kernel/debug/kmemleak. Enabling this | |
230 | feature will introduce an overhead to memory | |
231 | allocations. See Documentation/dev-tools/kmemleak.rst for more | |
232 | details. | |
233 | ||
234 | Enabling DEBUG_SLAB or SLUB_DEBUG may increase the chances | |
235 | of finding leaks due to the slab objects poisoning. | |
236 | ||
237 | In order to access the kmemleak file, debugfs needs to be | |
238 | mounted (usually at /sys/kernel/debug). | |
239 | ||
240 | config DEBUG_KMEMLEAK_MEM_POOL_SIZE | |
241 | int "Kmemleak memory pool size" | |
242 | depends on DEBUG_KMEMLEAK | |
243 | range 200 1000000 | |
244 | default 16000 | |
245 | help | |
246 | Kmemleak must track all the memory allocations to avoid | |
247 | reporting false positives. Since memory may be allocated or | |
248 | freed before kmemleak is fully initialised, use a static pool | |
249 | of metadata objects to track such callbacks. After kmemleak is | |
250 | fully initialised, this memory pool acts as an emergency one | |
251 | if slab allocations fail. | |
252 | ||
b2db9ef2 ZH |
253 | config DEBUG_KMEMLEAK_DEFAULT_OFF |
254 | bool "Default kmemleak to off" | |
255 | depends on DEBUG_KMEMLEAK | |
256 | help | |
257 | Say Y here to disable kmemleak by default. It can then be enabled | |
258 | on the command line via kmemleak=on. | |
259 | ||
260 | config DEBUG_KMEMLEAK_AUTO_SCAN | |
261 | bool "Enable kmemleak auto scan thread on boot up" | |
262 | default y | |
263 | depends on DEBUG_KMEMLEAK | |
264 | help | |
265 | Depending on the cpu, kmemleak scan may be cpu intensive and can | |
266 | stall user tasks at times. This option enables/disables automatic | |
267 | kmemleak scan at boot up. | |
268 | ||
269 | Say N here to disable kmemleak auto scan thread to stop automatic | |
270 | scanning. Disabling this option disables automatic reporting of | |
271 | memory leaks. | |
272 | ||
273 | If unsure, say Y. | |
274 | ||
52f23865 SB |
275 | config PER_VMA_LOCK_STATS |
276 | bool "Statistics for per-vma locks" | |
277 | depends on PER_VMA_LOCK | |
52f23865 | 278 | help |
6152e53d SB |
279 | Say Y here to enable success, retry and failure counters of page |
280 | faults handled under protection of per-vma locks. When enabled, the | |
281 | counters are exposed in /proc/vmstat. This information is useful for | |
282 | kernel developers to evaluate effectiveness of per-vma locks and to | |
283 | identify pathological cases. Counting these events introduces a small | |
284 | overhead in the page fault path. | |
285 | ||
286 | If in doubt, say N. |