You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2022/09/02 11:07:16 UTC

[incubator-nuttx] 01/02: UBSan: Allow custom the sanitizer in Kconfig

This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit 32a21a1b6762081e2f925bc63b9daf61f5c8b15a
Author: Huang Qi <hu...@xiaomi.com>
AuthorDate: Fri Sep 2 04:42:45 2022 +0000

    UBSan: Allow custom the sanitizer in Kconfig
    
    Signed-off-by: Huang Qi <hu...@xiaomi.com>
---
 arch/arm/src/arm/Toolchain.defs       | 2 +-
 arch/arm/src/armv6-m/Toolchain.defs   | 2 +-
 arch/arm/src/armv7-a/Toolchain.defs   | 2 +-
 arch/arm/src/armv7-m/Toolchain.defs   | 2 +-
 arch/arm/src/armv7-r/Toolchain.defs   | 2 +-
 arch/arm/src/armv8-m/Toolchain.defs   | 2 +-
 arch/arm64/src/Toolchain.defs         | 2 +-
 arch/risc-v/src/common/Toolchain.defs | 2 +-
 arch/xtensa/src/lx6/Toolchain.defs    | 2 +-
 arch/xtensa/src/lx7/Toolchain.defs    | 2 +-
 boards/sim/sim/sim/scripts/Make.defs  | 4 ++--
 mm/Kconfig                            | 9 +++++++++
 12 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/arch/arm/src/arm/Toolchain.defs b/arch/arm/src/arm/Toolchain.defs
index c86a8ee5f2..592cfadb03 100644
--- a/arch/arm/src/arm/Toolchain.defs
+++ b/arch/arm/src/arm/Toolchain.defs
@@ -84,7 +84,7 @@ ifeq ($(CONFIG_MM_KASAN_ALL),y)
 endif
 
 ifeq ($(CONFIG_MM_UBSAN_ALL),y)
-  ARCHOPTIMIZATION += -fsanitize=undefined
+  ARCHOPTIMIZATION += $(CONFIG_MM_UBSAN_OPTION)
 endif
 
 ifeq ($(CONFIG_MM_UBSAN_TRAP_ON_ERROR),y)
diff --git a/arch/arm/src/armv6-m/Toolchain.defs b/arch/arm/src/armv6-m/Toolchain.defs
index ca5d553759..80d43368bd 100644
--- a/arch/arm/src/armv6-m/Toolchain.defs
+++ b/arch/arm/src/armv6-m/Toolchain.defs
@@ -170,7 +170,7 @@ ifeq ($(CONFIG_MM_KASAN_ALL),y)
 endif
 
 ifeq ($(CONFIG_MM_UBSAN_ALL),y)
-  ARCHOPTIMIZATION += -fsanitize=undefined
+  ARCHOPTIMIZATION += $(CONFIG_MM_UBSAN_OPTION)
 endif
 
 ifeq ($(CONFIG_MM_UBSAN_TRAP_ON_ERROR),y)
diff --git a/arch/arm/src/armv7-a/Toolchain.defs b/arch/arm/src/armv7-a/Toolchain.defs
index 7bad83ad97..73a0cd0b89 100644
--- a/arch/arm/src/armv7-a/Toolchain.defs
+++ b/arch/arm/src/armv7-a/Toolchain.defs
@@ -125,7 +125,7 @@ ifeq ($(CONFIG_ARCH_COVERAGE_ALL),y)
 endif
 
 ifeq ($(CONFIG_MM_UBSAN_ALL),y)
-  ARCHOPTIMIZATION += -fsanitize=undefined
+  ARCHOPTIMIZATION += $(CONFIG_MM_UBSAN_OPTION)
 endif
 
 ifeq ($(CONFIG_MM_UBSAN_TRAP_ON_ERROR),y)
diff --git a/arch/arm/src/armv7-m/Toolchain.defs b/arch/arm/src/armv7-m/Toolchain.defs
index 2cd7dab07d..e769a348d8 100644
--- a/arch/arm/src/armv7-m/Toolchain.defs
+++ b/arch/arm/src/armv7-m/Toolchain.defs
@@ -90,7 +90,7 @@ ifeq ($(CONFIG_ARMV7M_STACKCHECK),y)
 endif
 
 ifeq ($(CONFIG_MM_UBSAN_ALL),y)
-  ARCHOPTIMIZATION += -fsanitize=undefined
+  ARCHOPTIMIZATION += $(CONFIG_MM_UBSAN_OPTION)
 endif
 
 ifeq ($(CONFIG_MM_UBSAN_TRAP_ON_ERROR),y)
diff --git a/arch/arm/src/armv7-r/Toolchain.defs b/arch/arm/src/armv7-r/Toolchain.defs
index 27c4f1a34d..978b1b2143 100644
--- a/arch/arm/src/armv7-r/Toolchain.defs
+++ b/arch/arm/src/armv7-r/Toolchain.defs
@@ -101,7 +101,7 @@ ifeq ($(CONFIG_MM_KASAN_ALL),y)
 endif
 
 ifeq ($(CONFIG_MM_UBSAN_ALL),y)
-  ARCHOPTIMIZATION += -fsanitize=undefined
+  ARCHOPTIMIZATION += $(CONFIG_MM_UBSAN_OPTION)
 endif
 
 ifeq ($(CONFIG_MM_UBSAN_TRAP_ON_ERROR),y)
diff --git a/arch/arm/src/armv8-m/Toolchain.defs b/arch/arm/src/armv8-m/Toolchain.defs
index c0a5e72550..67989a43cd 100644
--- a/arch/arm/src/armv8-m/Toolchain.defs
+++ b/arch/arm/src/armv8-m/Toolchain.defs
@@ -90,7 +90,7 @@ ifeq ($(CONFIG_ARMV8M_STACKCHECK),y)
 endif
 
 ifeq ($(CONFIG_MM_UBSAN_ALL),y)
-  ARCHOPTIMIZATION += -fsanitize=undefined
+  ARCHOPTIMIZATION += $(CONFIG_MM_UBSAN_OPTION)
 endif
 
 ifeq ($(CONFIG_MM_UBSAN_TRAP_ON_ERROR),y)
diff --git a/arch/arm64/src/Toolchain.defs b/arch/arm64/src/Toolchain.defs
index 3d49f4e164..dc725d4133 100644
--- a/arch/arm64/src/Toolchain.defs
+++ b/arch/arm64/src/Toolchain.defs
@@ -63,7 +63,7 @@ ifeq ($(CONFIG_ARCH_COVERAGE_ALL),y)
 endif
 
 ifeq ($(CONFIG_MM_UBSAN_ALL),y)
-  ARCHOPTIMIZATION += -fsanitize=undefined
+  ARCHOPTIMIZATION += $(CONFIG_MM_UBSAN_OPTION)
 endif
 
 ifeq ($(CONFIG_MM_UBSAN_TRAP_ON_ERROR),y)
diff --git a/arch/risc-v/src/common/Toolchain.defs b/arch/risc-v/src/common/Toolchain.defs
index 9d6e1031c7..8e6b9edac6 100644
--- a/arch/risc-v/src/common/Toolchain.defs
+++ b/arch/risc-v/src/common/Toolchain.defs
@@ -167,7 +167,7 @@ ifeq ($(CONFIG_MM_KASAN_ALL),y)
 endif
 
 ifeq ($(CONFIG_MM_UBSAN_ALL),y)
-  ARCHOPTIMIZATION += -fsanitize=undefined
+  ARCHOPTIMIZATION += $(CONFIG_MM_UBSAN_OPTION)
 endif
 
 ifeq ($(CONFIG_MM_UBSAN_TRAP_ON_ERROR),y)
diff --git a/arch/xtensa/src/lx6/Toolchain.defs b/arch/xtensa/src/lx6/Toolchain.defs
index e5a7e444cd..7cc1c55c89 100644
--- a/arch/xtensa/src/lx6/Toolchain.defs
+++ b/arch/xtensa/src/lx6/Toolchain.defs
@@ -48,7 +48,7 @@ ifeq ($(CONFIG_MM_KASAN_ALL),y)
 endif
 
 ifeq ($(CONFIG_MM_UBSAN_ALL),y)
-  ARCHOPTIMIZATION += -fsanitize=undefined
+  ARCHOPTIMIZATION += $(CONFIG_MM_UBSAN_OPTION)
 endif
 
 ifeq ($(CONFIG_MM_UBSAN_TRAP_ON_ERROR),y)
diff --git a/arch/xtensa/src/lx7/Toolchain.defs b/arch/xtensa/src/lx7/Toolchain.defs
index 5ff6a0dc1b..9f92ef3e7f 100644
--- a/arch/xtensa/src/lx7/Toolchain.defs
+++ b/arch/xtensa/src/lx7/Toolchain.defs
@@ -48,7 +48,7 @@ ifeq ($(CONFIG_MM_KASAN_ALL),y)
 endif
 
 ifeq ($(CONFIG_MM_UBSAN_ALL),y)
-  ARCHOPTIMIZATION += -fsanitize=undefined
+  ARCHOPTIMIZATION += $(CONFIG_MM_UBSAN_OPTION)
 endif
 
 ifeq ($(CONFIG_MM_UBSAN_TRAP_ON_ERROR),y)
diff --git a/boards/sim/sim/sim/scripts/Make.defs b/boards/sim/sim/sim/scripts/Make.defs
index af6e6054a0..ef4b1462b9 100644
--- a/boards/sim/sim/sim/scripts/Make.defs
+++ b/boards/sim/sim/sim/scripts/Make.defs
@@ -78,9 +78,9 @@ else ifeq ($(CONFIG_MM_KASAN_ALL),y)
 endif
 
 ifeq ($(CONFIG_SIM_UBSAN),y)
-  ARCHOPTIMIZATION += -fsanitize=undefined
+  ARCHOPTIMIZATION += $(CONFIG_MM_UBSAN_OPTION)
 else ifeq ($(CONFIG_MM_UBSAN_ALL),y)
-  ARCHOPTIMIZATION += -fsanitize=undefined
+  ARCHOPTIMIZATION += $(CONFIG_MM_UBSAN_OPTION)
 endif
 
 ifeq ($(CONFIG_MM_UBSAN_TRAP_ON_ERROR),y)
diff --git a/mm/Kconfig b/mm/Kconfig
index c123565025..f198396d11 100644
--- a/mm/Kconfig
+++ b/mm/Kconfig
@@ -222,6 +222,15 @@ config MM_UBSAN_ALL
 		will get image size increased and performance decreased
 		significantly.
 
+config MM_UBSAN_OPTION
+	string "UBSan options"
+	depends on MM_UBSAN
+	default "-fsanitize=undefined"
+	---help---
+		This option activates specified UBSan instrumentation. Please
+		refer to https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html
+		for available options.
+
 config MM_UBSAN_TRAP_ON_ERROR
 	bool "Enable UBsan trap on error to crash immediately"
 	depends on MM_UBSAN