kasan: enable instrumentation of global variables
authorAndrey Ryabinin <[email protected]>
Fri, 13 Feb 2015 22:40:17 +0000 (14:40 -0800)
committerLinus Torvalds <[email protected]>
Sat, 14 Feb 2015 05:21:42 +0000 (21:21 -0800)
commitbebf56a1b176c2e1c9efe44e7e6915532cc682cf
tree4b967827878142197f2b62cd0b89652873631192
parent6301939d97d079f0d3dbe71e750f4daf5d39fc33
kasan: enable instrumentation of global variables

This feature let us to detect accesses out of bounds of global variables.
This will work as for globals in kernel image, so for globals in modules.
Currently this won't work for symbols in user-specified sections (e.g.
__init, __read_mostly, ...)

The idea of this is simple.  Compiler increases each global variable by
redzone size and add constructors invoking __asan_register_globals()
function.  Information about global variable (address, size, size with
redzone ...) passed to __asan_register_globals() so we could poison
variable's redzone.

This patch also forces module_alloc() to return 8*PAGE_SIZE aligned
address making shadow memory handling (
kasan_module_alloc()/kasan_module_free() ) more simple.  Such alignment
guarantees that each shadow page backing modules address space correspond
to only one module_alloc() allocation.

Signed-off-by: Andrey Ryabinin <[email protected]>
Cc: Dmitry Vyukov <[email protected]>
Cc: Konstantin Serebryany <[email protected]>
Cc: Dmitry Chernenkov <[email protected]>
Signed-off-by: Andrey Konovalov <[email protected]>
Cc: Yuri Gribov <[email protected]>
Cc: Konstantin Khlebnikov <[email protected]>
Cc: Sasha Levin <[email protected]>
Cc: Christoph Lameter <[email protected]>
Cc: Joonsoo Kim <[email protected]>
Cc: Dave Hansen <[email protected]>
Cc: Andi Kleen <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: "H. Peter Anvin" <[email protected]>
Cc: Christoph Lameter <[email protected]>
Cc: Pekka Enberg <[email protected]>
Cc: David Rientjes <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
12 files changed:
Documentation/kasan.txt
arch/x86/kernel/module.c
arch/x86/mm/kasan_init_64.c
include/linux/compiler-gcc4.h
include/linux/compiler-gcc5.h
include/linux/kasan.h
kernel/module.c
lib/Kconfig.kasan
mm/kasan/kasan.c
mm/kasan/kasan.h
mm/kasan/report.c
scripts/Makefile.kasan