Add the UBSAN_LOCAL_BOUNDS check for Clang build
authorAlexander Popov <alex.popov@linux.com>
Sat, 24 Sep 2022 21:51:25 +0000 (00:51 +0300)
committerAlexander Popov <alex.popov@linux.com>
Sat, 24 Sep 2022 21:51:25 +0000 (00:51 +0300)
Explanations from the Linux kernel commit 6a6155f664e31c9be43cd:

When the kernel is compiled with Clang, -fsanitize=bounds expands to
-fsanitize=array-bounds and -fsanitize=local-bounds.

Enabling -fsanitize=local-bounds with Clang has the side-effect of
inserting traps.

That's why UBSAN_LOCAL_BOUNDS can enable the 'local-bounds' option
only when UBSAN_TRAP is enabled.

kconfig_hardened_check/__init__.py

index 2cbcfa5e8197f592c7ad005aea65244d1504f56b..de7408417e020e4e630ccfd3eac69d5497e9c54c 100644 (file)
@@ -505,6 +505,9 @@ def add_kconfig_checks(l, arch):
     # 'self_protection', 'my'
     l += [OR(KconfigCheck('self_protection', 'my', 'RESET_ATTACK_MITIGATION', 'y'),
              efi_not_set)] # needs userspace support (systemd)
+    l += [OR(KconfigCheck('self_protection', 'my', 'UBSAN_LOCAL_BOUNDS', 'y'),
+             AND(ubsan_bounds_is_set,
+                 cc_is_gcc))]
     if arch == 'X86_64':
         l += [KconfigCheck('self_protection', 'my', 'SLS', 'y')] # vs CVE-2021-26341 in Straight-Line-Speculation
         l += [AND(KconfigCheck('self_protection', 'my', 'AMD_IOMMU_V2', 'y'),