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" | |
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 | ||
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 |
ee3b4290 AM |
16 | ---help--- |
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 CB |
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 | ||
8aa49762 CD |
48 | config PAGE_OWNER |
49 | bool "Track page owner" | |
50 | depends on DEBUG_KERNEL && STACKTRACE_SUPPORT | |
51 | select DEBUG_FS | |
52 | select STACKTRACE | |
53 | select STACKDEPOT | |
54 | select PAGE_EXTENSION | |
55 | help | |
56 | This keeps track of what call chain is the owner of a page, may | |
57 | help to find bare alloc_page(s) leaks. Even if you include this | |
58 | feature on your build, it is disabled in default. You should pass | |
59 | "page_owner=on" to boot parameter in order to enable it. Eats | |
60 | a fair amount of memory if enabled. See tools/vm/page_owner_sort.c | |
61 | for user-space helper. | |
62 | ||
63 | If unsure, say N. | |
64 | ||
6a11f75b | 65 | config PAGE_POISONING |
8823b1db | 66 | bool "Poison pages after freeing" |
8823b1db LA |
67 | select PAGE_POISONING_NO_SANITY if HIBERNATION |
68 | ---help--- | |
69 | Fill the pages with poison patterns after free_pages() and verify | |
70 | the patterns before alloc_pages. The filling of the memory helps | |
71 | reduce the risk of information leaks from freed data. This does | |
8c9a134c KC |
72 | have a potential performance impact if enabled with the |
73 | "page_poison=1" kernel boot option. | |
8823b1db LA |
74 | |
75 | Note that "poison" here is not the same thing as the "HWPoison" | |
76 | for CONFIG_MEMORY_FAILURE. This is software poisoning only. | |
77 | ||
78 | If unsure, say N | |
79 | ||
80 | config PAGE_POISONING_NO_SANITY | |
81 | depends on PAGE_POISONING | |
82 | bool "Only poison, don't sanity check" | |
83 | ---help--- | |
84 | Skip the sanity checking on alloc, only fill the pages with | |
85 | poison on free. This reduces some of the overhead of the | |
86 | poisoning feature. | |
87 | ||
88 | If you are only interested in sanitization, say Y. Otherwise | |
89 | say N. | |
1414c7f4 LA |
90 | |
91 | config PAGE_POISONING_ZERO | |
8c9a134c | 92 | bool "Use zero for poisoning instead of debugging value" |
1414c7f4 LA |
93 | depends on PAGE_POISONING |
94 | ---help--- | |
95 | Instead of using the existing poison value, fill the pages with | |
96 | zeros. This makes it harder to detect when errors are occurring | |
97 | due to sanitization but the zeroing at free means that it is | |
98 | no longer necessary to write zeros when GFP_ZERO is used on | |
99 | allocation. | |
100 | ||
1414c7f4 | 101 | If unsure, say N |
95813b8f JK |
102 | |
103 | config DEBUG_PAGE_REF | |
104 | bool "Enable tracepoint to track down page reference manipulation" | |
105 | depends on DEBUG_KERNEL | |
106 | depends on TRACEPOINTS | |
107 | ---help--- | |
108 | This is a feature to add tracepoint for tracking down page reference | |
109 | manipulation. This tracking is useful to diagnose functional failure | |
110 | due to migration failures caused by page reference mismatches. Be | |
111 | careful when enabling this feature because it adds about 30 KB to the | |
112 | kernel code. However the runtime performance overhead is virtually | |
113 | nil until the tracepoints are actually enabled. | |
2959a5f7 JP |
114 | |
115 | config DEBUG_RODATA_TEST | |
116 | bool "Testcase for the marking rodata read-only" | |
117 | depends on STRICT_KERNEL_RWX | |
118 | ---help--- | |
119 | This option enables a testcase for the setting rodata read-only. |