History

security: Create "kernel hardening" config area

Right now kernel hardening options are scattered around various Kconfig files. This can be a central place to collect these kinds of options going forward. This is initially populated with the memory initialization options from the gcc-plugins.

Kees Cook committed 7 years ago

Commit 9f671e51 parent 8c2ffd93 files · +101 −69Browse files

Showing the changes to scripts (1 of 3 files). Show all

Unified · Split

scripts/gcc-plugins/Kconfig+6−69
@@ -13,17 +13,19 @@ config HAVE_GCC_PLUGINS · 12 unmodified lines
1313 An arch should select this symbol if it supports building with
1414 GCC plugins.
1515
16−menuconfig GCC_PLUGINS
17− bool "GCC plugins"
16+config GCC_PLUGINS
17+ bool
1818 depends on HAVE_GCC_PLUGINS
1919 depends on PLUGIN_HOSTCC != ""
20+ default y
2021 help
2122 GCC plugins are loadable modules that provide extra features to the
2223 compiler. They are useful for runtime instrumentation and static analysis.
2324
2425 See Documentation/gcc-plugins.txt for details.
2526
26−if GCC_PLUGINS
27+menu "GCC plugins"
28+ depends on GCC_PLUGINS
2729
2830 config GCC_PLUGIN_CYC_COMPLEXITY
2931 bool "Compute the cyclomatic complexity of a function" if EXPERT
@@ -66,71 +68,6 @@ config GCC_PLUGIN_LATENT_ENTROPY · 36 unmodified lines
6668 * https://grsecurity.net/
6769 * https://pax.grsecurity.net/
6870
69−config GCC_PLUGIN_STRUCTLEAK
70− bool "Zero initialize stack variables"
71− help
72− While the kernel is built with warnings enabled for any missed
73− stack variable initializations, this warning is silenced for
74− anything passed by reference to another function, under the
75− occasionally misguided assumption that the function will do
76− the initialization. As this regularly leads to exploitable
77− flaws, this plugin is available to identify and zero-initialize
78− such variables, depending on the chosen level of coverage.
79−
80− This plugin was originally ported from grsecurity/PaX. More
81− information at:
82− * https://grsecurity.net/
83− * https://pax.grsecurity.net/
84−
85−choice
86− prompt "Coverage"
87− depends on GCC_PLUGIN_STRUCTLEAK
88− default GCC_PLUGIN_STRUCTLEAK_BYREF_ALL
89− help
90− This chooses the level of coverage over classes of potentially
91− uninitialized variables. The selected class will be
92− zero-initialized before use.
93−
94− config GCC_PLUGIN_STRUCTLEAK_USER
95− bool "structs marked for userspace"
96− help
97− Zero-initialize any structures on the stack containing
98− a __user attribute. This can prevent some classes of
99− uninitialized stack variable exploits and information
100− exposures, like CVE-2013-2141:
101− https://git.kernel.org/linus/b9e146d8eb3b9eca
102−
103− config GCC_PLUGIN_STRUCTLEAK_BYREF
104− bool "structs passed by reference"
105− help
106− Zero-initialize any structures on the stack that may
107− be passed by reference and had not already been
108− explicitly initialized. This can prevent most classes
109− of uninitialized stack variable exploits and information
110− exposures, like CVE-2017-1000410:
111− https://git.kernel.org/linus/06e7e776ca4d3654
112−
113− config GCC_PLUGIN_STRUCTLEAK_BYREF_ALL
114− bool "anything passed by reference"
115− help
116− Zero-initialize any stack variables that may be passed
117− by reference and had not already been explicitly
118− initialized. This is intended to eliminate all classes
119− of uninitialized stack variable exploits and information
120− exposures.
121−
122−endchoice
123−
124−config GCC_PLUGIN_STRUCTLEAK_VERBOSE
125− bool "Report forcefully initialized variables"
126− depends on GCC_PLUGIN_STRUCTLEAK
127− depends on !COMPILE_TEST # too noisy
128− help
129− This option will cause a warning to be printed each time the
130− structleak plugin finds a variable it thinks needs to be
131− initialized. Since not all existing initializers are detected
132− by the plugin, this can produce false positive warnings.
133−
13471 config GCC_PLUGIN_RANDSTRUCT
13572 bool "Randomize layout of sensitive kernel structures"
13673 select MODVERSIONS if MODULES
@@ -226,4 +163,4 @@ config GCC_PLUGIN_ARM_SSP_PER_TASK · 89 unmodified lines
226163 bool
227164 depends on GCC_PLUGINS && ARM
228165
229−endif
166+endmenu