mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-06 05:06:29 +00:00
kasan: update required compiler versions in documentation
Updates the recently changed compiler requirements for KASAN. In particular, we require GCC >= 8.3.0, and add a note that Clang 11 supports OOB detection of globals. Fixes:7b861a53e4
("kasan: Bump required compiler version") Fixes:acf7b0bf7d
("kasan: Fix required compiler version") Signed-off-by: Marco Elver <elver@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Reviewed-by: Andrey Konovalov <andreyknvl@google.com> Cc: Dmitry Vyukov <dvyukov@google.com> Cc: Andrey Ryabinin <aryabinin@virtuozzo.com> Cc: Nick Desaulniers <ndesaulniers@google.com> Cc: Walter Wu <walter-zh.wu@mediatek.com> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Daniel Axtens <dja@axtens.net> Link: http://lkml.kernel.org/r/20200629104157.3242503-2-elver@google.com Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
7a3767f83f
commit
ac4766be5e
@ -13,11 +13,8 @@ KASAN uses compile-time instrumentation to insert validity checks before every
|
|||||||
memory access, and therefore requires a compiler version that supports that.
|
memory access, and therefore requires a compiler version that supports that.
|
||||||
|
|
||||||
Generic KASAN is supported in both GCC and Clang. With GCC it requires version
|
Generic KASAN is supported in both GCC and Clang. With GCC it requires version
|
||||||
4.9.2 or later for basic support and version 5.0 or later for detection of
|
8.3.0 or later. With Clang it requires version 7.0.0 or later, but detection of
|
||||||
out-of-bounds accesses for stack and global variables and for inline
|
out-of-bounds accesses for global variables is only supported since Clang 11.
|
||||||
instrumentation mode (see the Usage section). With Clang it requires version
|
|
||||||
7.0.0 or later and it doesn't support detection of out-of-bounds accesses for
|
|
||||||
global variables yet.
|
|
||||||
|
|
||||||
Tag-based KASAN is only supported in Clang and requires version 7.0.0 or later.
|
Tag-based KASAN is only supported in Clang and requires version 7.0.0 or later.
|
||||||
|
|
||||||
|
@ -40,6 +40,7 @@ choice
|
|||||||
software tag-based KASAN (a version based on software memory
|
software tag-based KASAN (a version based on software memory
|
||||||
tagging, arm64 only, similar to userspace HWASan, enabled with
|
tagging, arm64 only, similar to userspace HWASan, enabled with
|
||||||
CONFIG_KASAN_SW_TAGS).
|
CONFIG_KASAN_SW_TAGS).
|
||||||
|
|
||||||
Both generic and tag-based KASAN are strictly debugging features.
|
Both generic and tag-based KASAN are strictly debugging features.
|
||||||
|
|
||||||
config KASAN_GENERIC
|
config KASAN_GENERIC
|
||||||
@ -51,16 +52,18 @@ config KASAN_GENERIC
|
|||||||
select STACKDEPOT
|
select STACKDEPOT
|
||||||
help
|
help
|
||||||
Enables generic KASAN mode.
|
Enables generic KASAN mode.
|
||||||
Supported in both GCC and Clang. With GCC it requires version 4.9.2
|
|
||||||
or later for basic support and version 5.0 or later for detection of
|
This mode is supported in both GCC and Clang. With GCC it requires
|
||||||
out-of-bounds accesses for stack and global variables and for inline
|
version 8.3.0 or later. With Clang it requires version 7.0.0 or
|
||||||
instrumentation mode (CONFIG_KASAN_INLINE). With Clang it requires
|
later, but detection of out-of-bounds accesses for global variables
|
||||||
version 3.7.0 or later and it doesn't support detection of
|
is supported only since Clang 11.
|
||||||
out-of-bounds accesses for global variables yet.
|
|
||||||
This mode consumes about 1/8th of available memory at kernel start
|
This mode consumes about 1/8th of available memory at kernel start
|
||||||
and introduces an overhead of ~x1.5 for the rest of the allocations.
|
and introduces an overhead of ~x1.5 for the rest of the allocations.
|
||||||
The performance slowdown is ~x3.
|
The performance slowdown is ~x3.
|
||||||
|
|
||||||
For better error detection enable CONFIG_STACKTRACE.
|
For better error detection enable CONFIG_STACKTRACE.
|
||||||
|
|
||||||
Currently CONFIG_KASAN_GENERIC doesn't work with CONFIG_DEBUG_SLAB
|
Currently CONFIG_KASAN_GENERIC doesn't work with CONFIG_DEBUG_SLAB
|
||||||
(the resulting kernel does not boot).
|
(the resulting kernel does not boot).
|
||||||
|
|
||||||
@ -73,15 +76,19 @@ config KASAN_SW_TAGS
|
|||||||
select STACKDEPOT
|
select STACKDEPOT
|
||||||
help
|
help
|
||||||
Enables software tag-based KASAN mode.
|
Enables software tag-based KASAN mode.
|
||||||
|
|
||||||
This mode requires Top Byte Ignore support by the CPU and therefore
|
This mode requires Top Byte Ignore support by the CPU and therefore
|
||||||
is only supported for arm64.
|
is only supported for arm64. This mode requires Clang version 7.0.0
|
||||||
This mode requires Clang version 7.0.0 or later.
|
or later.
|
||||||
|
|
||||||
This mode consumes about 1/16th of available memory at kernel start
|
This mode consumes about 1/16th of available memory at kernel start
|
||||||
and introduces an overhead of ~20% for the rest of the allocations.
|
and introduces an overhead of ~20% for the rest of the allocations.
|
||||||
This mode may potentially introduce problems relating to pointer
|
This mode may potentially introduce problems relating to pointer
|
||||||
casting and comparison, as it embeds tags into the top byte of each
|
casting and comparison, as it embeds tags into the top byte of each
|
||||||
pointer.
|
pointer.
|
||||||
|
|
||||||
For better error detection enable CONFIG_STACKTRACE.
|
For better error detection enable CONFIG_STACKTRACE.
|
||||||
|
|
||||||
Currently CONFIG_KASAN_SW_TAGS doesn't work with CONFIG_DEBUG_SLAB
|
Currently CONFIG_KASAN_SW_TAGS doesn't work with CONFIG_DEBUG_SLAB
|
||||||
(the resulting kernel does not boot).
|
(the resulting kernel does not boot).
|
||||||
|
|
||||||
@ -107,7 +114,6 @@ config KASAN_INLINE
|
|||||||
memory accesses. This is faster than outline (in some workloads
|
memory accesses. This is faster than outline (in some workloads
|
||||||
it gives about x2 boost over outline instrumentation), but
|
it gives about x2 boost over outline instrumentation), but
|
||||||
make kernel's .text size much bigger.
|
make kernel's .text size much bigger.
|
||||||
For CONFIG_KASAN_GENERIC this requires GCC 5.0 or later.
|
|
||||||
|
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user