Merge tag 'perf-tools-for-v6.6-1-2023-09-05' of git://git.kernel.org/pub/scm/linux...
[linux-2.6-microblaze.git] / mm / Kconfig.debug
1 # SPDX-License-Identifier: GPL-2.0-only
2 config PAGE_EXTENSION
3         bool "Extend memmap on extra space for more information on page"
4         help
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
11 config DEBUG_PAGEALLOC
12         bool "Debug page memory allocations"
13         depends on DEBUG_KERNEL
14         depends on !HIBERNATION || ARCH_SUPPORTS_DEBUG_PAGEALLOC && !PPC && !SPARC
15         select PAGE_POISONING if !ARCH_SUPPORTS_DEBUG_PAGEALLOC
16         help
17           Unmap pages from the kernel linear mapping after free_pages().
18           Depending on runtime enablement, this results in a small or large
19           slowdown, but helps to find certain types of memory corruption.
20
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,
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.
27
28           For architectures which don't enable ARCH_SUPPORTS_DEBUG_PAGEALLOC,
29           fill the pages with poison patterns after free_pages() and verify
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.
34
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?"
43         depends on DEBUG_PAGEALLOC
44         help
45           Enable debug page memory allocations by default? This value
46           can be overridden by debug_pagealloc=off|on.
47
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
59         depends on SLUB && SYSFS && !SLUB_TINY
60         select STACKDEPOT if STACKTRACE_SUPPORT
61         help
62           SLUB has extensive debug support features. Disabling these can
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.
66
67 config SLUB_DEBUG_ON
68         bool "SLUB debugging on by default"
69         depends on SLUB && SLUB_DEBUG
70         select STACKDEPOT_ALWAYS_INIT if STACKTRACE_SUPPORT
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
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
93           a fair amount of memory if enabled. See tools/mm/page_owner_sort.c
94           for user-space helper.
95
96           If unsure, say N.
97
98 config PAGE_TABLE_CHECK
99         bool "Check for invalid mappings in user page tables"
100         depends on ARCH_SUPPORTS_PAGE_TABLE_CHECK
101         depends on EXCLUSIVE_SYSTEM_RAM
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
123 config PAGE_POISONING
124         bool "Poison pages after freeing"
125         help
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
129           have a potential performance impact if enabled with the
130           "page_poison=1" kernel boot option.
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
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.
138
139           If unsure, say N
140
141 config DEBUG_PAGE_REF
142         bool "Enable tracepoint to track down page reference manipulation"
143         depends on DEBUG_KERNEL
144         depends on TRACEPOINTS
145         help
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.
152
153 config DEBUG_RODATA_TEST
154     bool "Testcase for the marking rodata read-only"
155     depends on STRICT_KERNEL_RWX
156         help
157       This option enables a testcase for the setting rodata read-only.
158
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
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.
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
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
275 config PER_VMA_LOCK_STATS
276         bool "Statistics for per-vma locks"
277         depends on PER_VMA_LOCK
278         help
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.