Limit integer wrap-around mitigation to only the "size_t" type (for
now). Notably this covers all special functions/builtins that return
"size_t", like sizeof(). This remains an experimental feature and is
likely to be replaced with type annotations.

Signed-off-by: Kees Cook <k...@kernel.org>
---
Cc: Justin Stitt <justinst...@google.com>
Cc: "Gustavo A. R. Silva" <gustavo...@kernel.org>
Cc: Marco Elver <el...@google.com>
Cc: Andrey Konovalov <andreyk...@gmail.com>
Cc: Andrey Ryabinin <ryabinin....@gmail.com>
Cc: Andrew Morton <a...@linux-foundation.org>
Cc: Masahiro Yamada <masahi...@kernel.org>
Cc: Nathan Chancellor <nat...@kernel.org>
Cc: Nicolas Schier <nico...@fjasle.eu>
Cc: kasan-...@googlegroups.com
Cc: linux-hardening@vger.kernel.org
Cc: linux-kbu...@vger.kernel.org
---
 lib/Kconfig.ubsan               | 1 +
 scripts/Makefile.ubsan          | 3 ++-
 scripts/integer-wrap-ignore.scl | 3 +++
 3 files changed, 6 insertions(+), 1 deletion(-)
 create mode 100644 scripts/integer-wrap-ignore.scl

diff --git a/lib/Kconfig.ubsan b/lib/Kconfig.ubsan
index 888c2e72c586..4216b3a4ff21 100644
--- a/lib/Kconfig.ubsan
+++ b/lib/Kconfig.ubsan
@@ -125,6 +125,7 @@ config UBSAN_INTEGER_WRAP
        depends on $(cc-option,-fsanitize=unsigned-integer-overflow)
        depends on $(cc-option,-fsanitize=implicit-signed-integer-truncation)
        depends on $(cc-option,-fsanitize=implicit-unsigned-integer-truncation)
+       depends on $(cc-option,-fsanitize-ignorelist=/dev/null)
        help
          This option enables all of the sanitizers involved in integer overflow
          (wrap-around) mitigation: signed-integer-overflow, 
unsigned-integer-overflow,
diff --git a/scripts/Makefile.ubsan b/scripts/Makefile.ubsan
index 233379c193a7..9e35198edbf0 100644
--- a/scripts/Makefile.ubsan
+++ b/scripts/Makefile.ubsan
@@ -19,5 +19,6 @@ ubsan-integer-wrap-cflags-$(CONFIG_UBSAN_INTEGER_WRAP)     += 
\
        -fsanitize=signed-integer-overflow                      \
        -fsanitize=unsigned-integer-overflow                    \
        -fsanitize=implicit-signed-integer-truncation           \
-       -fsanitize=implicit-unsigned-integer-truncation
+       -fsanitize=implicit-unsigned-integer-truncation         \
+       -fsanitize-ignorelist=$(srctree)/scripts/integer-wrap-ignore.scl
 export CFLAGS_UBSAN_INTEGER_WRAP := $(ubsan-integer-wrap-cflags-y)
diff --git a/scripts/integer-wrap-ignore.scl b/scripts/integer-wrap-ignore.scl
new file mode 100644
index 000000000000..431c3053a4a2
--- /dev/null
+++ b/scripts/integer-wrap-ignore.scl
@@ -0,0 +1,3 @@
+[{unsigned-integer-overflow,signed-integer-overflow,implicit-signed-integer-truncation,implicit-unsigned-integer-truncation}]
+type:*
+type:size_t=sanitize
-- 
2.34.1


Reply via email to