Rewrite the randomize_kstack_offset check
authorAlexander Popov <alex.popov@linux.com>
Mon, 20 Jun 2022 17:13:50 +0000 (20:13 +0300)
committerAlexander Popov <alex.popov@linux.com>
Mon, 20 Jun 2022 17:13:50 +0000 (20:13 +0300)
Reusing "is not set" for CmdlineCheck is a nice hack.

kconfig_hardened_check/__init__.py

index 58d82f2b015f51dd4d54871907154f63351ee1ca..f0f571e8a0af82e6027c00f1a7ac06e7717ba864 100644 (file)
@@ -426,8 +426,7 @@ def add_kconfig_checks(l, arch):
     if arch in ('X86_64', 'ARM64', 'X86_32'):
         stackleak_is_set = KconfigCheck('self_protection', 'kspp', 'GCC_PLUGIN_STACKLEAK', 'y')
         l += [stackleak_is_set]
-        l += [OR(KconfigCheck('self_protection', 'kspp', 'RANDOMIZE_KSTACK_OFFSET_DEFAULT', 'y'),
-                 CmdlineCheck('self_protection', 'kspp', 'randomize_kstack_offset', '1'))]
+        l += [KconfigCheck('self_protection', 'kspp', 'RANDOMIZE_KSTACK_OFFSET_DEFAULT', 'y')]
     if arch in ('X86_64', 'X86_32'):
         l += [KconfigCheck('self_protection', 'kspp', 'SCHED_CORE', 'y')]
         l += [KconfigCheck('self_protection', 'kspp', 'DEFAULT_MMAP_MIN_ADDR', '65536')]
@@ -652,7 +651,10 @@ def add_cmdline_checks(l, arch):
     l += [OR(CmdlineCheck('self_protection', 'kspp', 'init_on_alloc', '1'),
              AND(KconfigCheck('self_protection', 'kspp', 'INIT_ON_ALLOC_DEFAULT_ON', 'y'),
                  CmdlineCheck('self_protection', 'kspp', 'init_on_alloc', 'is not set')))]
-
+    if arch in ('X86_64', 'ARM64', 'X86_32'):
+        l += [OR(CmdlineCheck('self_protection', 'kspp', 'randomize_kstack_offset', '1'),
+                 AND(KconfigCheck('self_protection', 'kspp', 'RANDOMIZE_KSTACK_OFFSET_DEFAULT', 'y'),
+                     CmdlineCheck('self_protection', 'kspp', 'randomize_kstack_offset', 'is not set')))]
     if arch in ('X86_64', 'X86_32'):
         l += [CmdlineCheck('self_protection', 'kspp', 'pti', 'on')]
     # TODO: add other