* [PATCH 3/3] ubsan/overflow: Enable ignorelist parsing and add type filter
2025-03-07 4:19 [PATCH 0/3] ubsan/overflow: Enable pattern exclusions Kees Cook
@ 2025-03-07 4:19 ` Kees Cook
2025-03-07 23:33 ` Justin Stitt
2025-03-07 23:39 ` Justin Stitt
0 siblings, 2 replies; 4+ messages in thread
From: Kees Cook @ 2025-03-07 4:19 UTC (permalink / raw)
To: Justin Stitt
Cc: Kees Cook, Gustavo A. R. Silva, Marco Elver, Andrey Konovalov,
Andrey Ryabinin, Andrew Morton, Masahiro Yamada,
Nathan Chancellor, Nicolas Schier, kasan-dev, linux-hardening,
linux-kbuild, Miguel Ojeda, Nick Desaulniers, Hao Luo,
Przemek Kitszel, Bill Wendling, Jakub Kicinski, Tony Ambardar,
Alexander Potapenko, Jan Hendrik Farr, Alexander Lobakin,
linux-kernel, llvm
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 <kees@kernel.org>
---
Cc: Justin Stitt <justinstitt@google.com>
Cc: "Gustavo A. R. Silva" <gustavoars@kernel.org>
Cc: Marco Elver <elver@google.com>
Cc: Andrey Konovalov <andreyknvl@gmail.com>
Cc: Andrey Ryabinin <ryabinin.a.a@gmail.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Masahiro Yamada <masahiroy@kernel.org>
Cc: Nathan Chancellor <nathan@kernel.org>
Cc: Nicolas Schier <nicolas@fjasle.eu>
Cc: kasan-dev@googlegroups.com
Cc: linux-hardening@vger.kernel.org
Cc: linux-kbuild@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
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 3/3] ubsan/overflow: Enable ignorelist parsing and add type filter
2025-03-07 4:19 ` [PATCH 3/3] ubsan/overflow: Enable ignorelist parsing and add type filter Kees Cook
@ 2025-03-07 23:33 ` Justin Stitt
2025-03-07 23:39 ` Justin Stitt
1 sibling, 0 replies; 4+ messages in thread
From: Justin Stitt @ 2025-03-07 23:33 UTC (permalink / raw)
To: Kees Cook
Cc: Gustavo A. R. Silva, Marco Elver, Andrey Konovalov,
Andrey Ryabinin, Andrew Morton, Masahiro Yamada,
Nathan Chancellor, Nicolas Schier, kasan-dev, linux-hardening,
linux-kbuild, Miguel Ojeda, Nick Desaulniers, Hao Luo,
Przemek Kitszel, Bill Wendling, Jakub Kicinski, Tony Ambardar,
Alexander Potapenko, Jan Hendrik Farr, Alexander Lobakin,
linux-kernel, llvm
Hi,
On Thu, Mar 06, 2025 at 08:19:11PM -0800, Kees Cook wrote:
> 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.
For future travelers, track the progress of type annotations over at
[1]. There's still discussion on how these will be implemented in Clang.
>
> Signed-off-by: Kees Cook <kees@kernel.org>
> ---
> Cc: Justin Stitt <justinstitt@google.com>
> Cc: "Gustavo A. R. Silva" <gustavoars@kernel.org>
> Cc: Marco Elver <elver@google.com>
> Cc: Andrey Konovalov <andreyknvl@gmail.com>
> Cc: Andrey Ryabinin <ryabinin.a.a@gmail.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Masahiro Yamada <masahiroy@kernel.org>
> Cc: Nathan Chancellor <nathan@kernel.org>
> Cc: Nicolas Schier <nicolas@fjasle.eu>
> Cc: kasan-dev@googlegroups.com
> Cc: linux-hardening@vger.kernel.org
> Cc: linux-kbuild@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
Hi again future travelers, sanitizer special case list support for
overflow/truncation sanitizers as well as the "=sanitize" comes from a
new Clang 20 feature allowing SCL's to specify sanitize categories, see [2].
> --
> 2.34.1
>
>
The plumbing looks correct,
Reviewed-by: Justin Stitt <justinstitt@google.com>
[1]: https://discourse.llvm.org/t/rfc-clang-canonical-wrapping-and-non-wrapping-types/84356
[2]: https://github.com/llvm/llvm-project/pull/107332
Thanks
Justin
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 3/3] ubsan/overflow: Enable ignorelist parsing and add type filter
2025-03-07 4:19 ` [PATCH 3/3] ubsan/overflow: Enable ignorelist parsing and add type filter Kees Cook
2025-03-07 23:33 ` Justin Stitt
@ 2025-03-07 23:39 ` Justin Stitt
1 sibling, 0 replies; 4+ messages in thread
From: Justin Stitt @ 2025-03-07 23:39 UTC (permalink / raw)
To: Kees Cook
Cc: Gustavo A. R. Silva, Marco Elver, Andrey Konovalov,
Andrey Ryabinin, Andrew Morton, Masahiro Yamada,
Nathan Chancellor, Nicolas Schier, kasan-dev, linux-hardening,
linux-kbuild, Miguel Ojeda, Nick Desaulniers, Hao Luo,
Przemek Kitszel, Bill Wendling, Jakub Kicinski, Tony Ambardar,
Alexander Potapenko, Jan Hendrik Farr, Alexander Lobakin,
linux-kernel, llvm
On Thu, Mar 06, 2025 at 08:19:11PM -0800, Kees Cook wrote:
> 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 <kees@kernel.org>
> ---
> Cc: Justin Stitt <justinstitt@google.com>
> Cc: "Gustavo A. R. Silva" <gustavoars@kernel.org>
> Cc: Marco Elver <elver@google.com>
> Cc: Andrey Konovalov <andreyknvl@gmail.com>
> Cc: Andrey Ryabinin <ryabinin.a.a@gmail.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Masahiro Yamada <masahiroy@kernel.org>
> Cc: Nathan Chancellor <nathan@kernel.org>
> Cc: Nicolas Schier <nicolas@fjasle.eu>
> Cc: kasan-dev@googlegroups.com
> Cc: linux-hardening@vger.kernel.org
> Cc: linux-kbuild@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
Forgot to mention this in my intial reply but we have to be careful
with what types are added here. Kees, I know we're on the same page from
offline chats but for others: using sanitizer case lists to discriminate
against types for the purposes of sanitizer instrumentation may not work
properly through various arithmetic conversions. Mainly, implicit
promotions which tend to break this particular approach.
Now, for size_t we got kind of "lucky" because there are no implicit
promotions with size_t, it doesn't get promoted. This is not the case
for other types. This further necessitates the need for canonical
wrapping types backed by in-source annotations/qualification -- coming
soon in Clang.
> --
> 2.34.1
>
Justin
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 3/3] ubsan/overflow: Enable ignorelist parsing and add type filter
@ 2025-03-18 0:51 kernel test robot
0 siblings, 0 replies; 4+ messages in thread
From: kernel test robot @ 2025-03-18 0:51 UTC (permalink / raw)
Cc: oe-kbuild-all, llvm
In-Reply-To: <20250307041914.937329-3-kees@kernel.org>
References: <20250307041914.937329-3-kees@kernel.org>
TO: Kees Cook <kees@kernel.org>
Hi Kees,
kernel test robot noticed the following build errors:
[auto build test ERROR on kees/for-next/hardening]
[also build test ERROR on masahiroy-kbuild/for-next masahiroy-kbuild/fixes kees/for-next/pstore linus/master v6.14-rc7]
[cannot apply to kees/for-next/kspp next-20250317]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Kees-Cook/ubsan-overflow-Rework-integer-overflow-sanitizer-option-to-turn-on-everything/20250307-122130
base: https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git for-next/hardening
patch link: https://lore.kernel.org/r/20250307041914.937329-3-kees%40kernel.org
patch subject: [PATCH 3/3] ubsan/overflow: Enable ignorelist parsing and add type filter
config: x86_64-randconfig-074-20250318 (https://download.01.org/0day-ci/archive/20250318/202503180815.hABxOEAV-lkp@intel.com/config)
compiler: clang version 20.1.0 (https://github.com/llvm/llvm-project 24a30daaa559829ad079f2ff7f73eb4e18095f88)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250318/202503180815.hABxOEAV-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202503180815.hABxOEAV-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from lib/fortify_kunit.c:43:
In file included from include/kunit/device.h:16:
In file included from include/kunit/test.h:22:
In file included from include/linux/kref.h:16:
In file included from include/linux/spinlock.h:59:
In file included from include/linux/irqflags.h:18:
In file included from arch/x86/include/asm/irqflags.h:80:
In file included from arch/x86/include/asm/paravirt.h:21:
In file included from include/linux/cpumask.h:12:
In file included from include/linux/bitmap.h:13:
In file included from include/linux/string.h:392:
>> include/linux/fortify-string.h:719:4: error: call to '__read_overflow' declared with 'error' attribute: detected read beyond size of object (1st parameter)
719 | __read_overflow();
| ^
1 error generated.
vim +719 include/linux/fortify-string.h
a28a6e860c6cf2 Francis Laniel 2021-02-25 710
92df138a8d663c Kees Cook 2022-02-08 711 __FORTIFY_INLINE __diagnose_as(__builtin_memcmp, 1, 2, 3)
281d0c962752fb Kees Cook 2022-02-08 712 int memcmp(const void * const POS0 p, const void * const POS0 q, __kernel_size_t size)
a28a6e860c6cf2 Francis Laniel 2021-02-25 713 {
21a2c74b0a2a78 Kees Cook 2023-04-07 714 const size_t p_size = __struct_size(p);
21a2c74b0a2a78 Kees Cook 2023-04-07 715 const size_t q_size = __struct_size(q);
a28a6e860c6cf2 Francis Laniel 2021-02-25 716
a28a6e860c6cf2 Francis Laniel 2021-02-25 717 if (__builtin_constant_p(size)) {
fa35198f39571b Kees Cook 2022-09-19 718 if (__compiletime_lessthan(p_size, size))
a28a6e860c6cf2 Francis Laniel 2021-02-25 @719 __read_overflow();
fa35198f39571b Kees Cook 2022-09-19 720 if (__compiletime_lessthan(q_size, size))
a28a6e860c6cf2 Francis Laniel 2021-02-25 721 __read_overflow2();
a28a6e860c6cf2 Francis Laniel 2021-02-25 722 }
3d965b33e40d97 Kees Cook 2023-04-07 723 if (p_size < size)
3d965b33e40d97 Kees Cook 2023-04-07 724 fortify_panic(FORTIFY_FUNC_memcmp, FORTIFY_READ, p_size, size, INT_MIN);
3d965b33e40d97 Kees Cook 2023-04-07 725 else if (q_size < size)
3d965b33e40d97 Kees Cook 2023-04-07 726 fortify_panic(FORTIFY_FUNC_memcmp, FORTIFY_READ, q_size, size, INT_MIN);
a28a6e860c6cf2 Francis Laniel 2021-02-25 727 return __underlying_memcmp(p, q, size);
a28a6e860c6cf2 Francis Laniel 2021-02-25 728 }
a28a6e860c6cf2 Francis Laniel 2021-02-25 729
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2025-03-18 0:52 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-18 0:51 [PATCH 3/3] ubsan/overflow: Enable ignorelist parsing and add type filter kernel test robot
-- strict thread matches above, loose matches on Subject: below --
2025-03-07 4:19 [PATCH 0/3] ubsan/overflow: Enable pattern exclusions Kees Cook
2025-03-07 4:19 ` [PATCH 3/3] ubsan/overflow: Enable ignorelist parsing and add type filter Kees Cook
2025-03-07 23:33 ` Justin Stitt
2025-03-07 23:39 ` Justin Stitt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox