Commit b8191d7d authored by Andrey Konovalov's avatar Andrey Konovalov Committed by Linus Torvalds

kasan: docs: update GENERIC implementation details section

Update the "Implementation details" section for generic KASAN:

 - Don't mention kmemcheck, it's not present in the kernel anymore.

 - Don't mention GCC as the only supported compiler.

 - Update kasan_mem_to_shadow() definition to match actual code.

 - Punctuation, readability, and other minor clean-ups.

Link: https://lkml.kernel.org/r/f2f35fdab701f8c709f63d328f98aec2982c8acc.1615559068.git.andreyknvl@google.comSigned-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
Reviewed-by: default avatarMarco Elver <elver@google.com>
Cc: Alexander Potapenko <glider@google.com>
Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
Cc: Dmitry Vyukov <dvyukov@google.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent f3590747
...@@ -209,12 +209,11 @@ Implementation details ...@@ -209,12 +209,11 @@ Implementation details
Generic KASAN Generic KASAN
~~~~~~~~~~~~~ ~~~~~~~~~~~~~
From a high level perspective, KASAN's approach to memory error detection is Software KASAN modes use shadow memory to record whether each byte of memory is
similar to that of kmemcheck: use shadow memory to record whether each byte of safe to access and use compile-time instrumentation to insert shadow memory
memory is safe to access, and use compile-time instrumentation to insert checks checks before each memory access.
of shadow memory on each memory access.
Generic KASAN dedicates 1/8th of kernel memory to its shadow memory (e.g. 16TB Generic KASAN dedicates 1/8th of kernel memory to its shadow memory (16TB
to cover 128TB on x86_64) and uses direct mapping with a scale and offset to to cover 128TB on x86_64) and uses direct mapping with a scale and offset to
translate a memory address to its corresponding shadow address. translate a memory address to its corresponding shadow address.
...@@ -223,23 +222,23 @@ address:: ...@@ -223,23 +222,23 @@ address::
static inline void *kasan_mem_to_shadow(const void *addr) static inline void *kasan_mem_to_shadow(const void *addr)
{ {
return ((unsigned long)addr >> KASAN_SHADOW_SCALE_SHIFT) return (void *)((unsigned long)addr >> KASAN_SHADOW_SCALE_SHIFT)
+ KASAN_SHADOW_OFFSET; + KASAN_SHADOW_OFFSET;
} }
where ``KASAN_SHADOW_SCALE_SHIFT = 3``. where ``KASAN_SHADOW_SCALE_SHIFT = 3``.
Compile-time instrumentation is used to insert memory access checks. Compiler Compile-time instrumentation is used to insert memory access checks. Compiler
inserts function calls (__asan_load*(addr), __asan_store*(addr)) before each inserts function calls (``__asan_load*(addr)``, ``__asan_store*(addr)``) before
memory access of size 1, 2, 4, 8 or 16. These functions check whether memory each memory access of size 1, 2, 4, 8, or 16. These functions check whether
access is valid or not by checking corresponding shadow memory. memory accesses are valid or not by checking corresponding shadow memory.
GCC 5.0 has possibility to perform inline instrumentation. Instead of making With inline instrumentation, instead of making function calls, the compiler
function calls GCC directly inserts the code to check the shadow memory. directly inserts the code to check shadow memory. This option significantly
This option significantly enlarges kernel but it gives x1.1-x2 performance enlarges the kernel, but it gives an x1.1-x2 performance boost over the
boost over outline instrumented kernel. outline-instrumented kernel.
Generic KASAN is the only mode that delays the reuse of freed object via Generic KASAN is the only mode that delays the reuse of freed objects via
quarantine (see mm/kasan/quarantine.c for implementation). quarantine (see mm/kasan/quarantine.c for implementation).
Software tag-based KASAN Software tag-based KASAN
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment