Merge pull request #5 from aryabinin/kasan

Misc updates for kasan
Merge pull request #6 from aryabinin/kasan

KASan updates from v4
Adapt Kasan unit tests for automatic parsing.
Enable automated parsing for kasan tests; add asserts.
Minor fixes
Test kasan: replace macros with functions
Fix style
Merge pull request #8 from steelannelida/kasan

Kasan
include: slub_def.h: catch argument mismatches in slab_err

add __printf() so compiler could catch argument mismatches.

Signed-off-by: Andrey Ryabinin <a.ryabinin@samsung.com>
kasan: introduce inline instrumentation

This patch only demonstration how easy this could be achieved.
GCC doesn't support this feature yet. Two patches required for this:
    https://gcc.gnu.org/ml/gcc-patches/2014-09/msg00452.html
    https://gcc.gnu.org/ml/gcc-patches/2014-09/msg00605.html

In inline instrumentation mode compiler directly inserts code
checking shadow memory instead of __asan_load/__asan_store
calls.
This is usually faster than outline. In some workloads inline is
2 times faster than outline instrumentation.

The downside of inline instrumentation is bloated kernel's .text size:

size noasan/vmlinux
   text     data     bss      dec     hex    filename
11759720  1566560  946176  14272456  d9c7c8  noasan/vmlinux

size outline/vmlinux
   text    data     bss      dec      hex    filename
16553474  1602592  950272  19106338  1238a22 outline/vmlinux

size inline/vmlinux
   text    data     bss      dec      hex    filename
32064759  1598688  946176  34609623  21019d7 inline/vmlinux

Signed-off-by: Andrey Ryabinin <a.ryabinin@samsung.com>
mm: kasan: built kasan with -fno-conserve-stack

Build kasan.c with -fno-conserve-stack  because -fconserve-stack is bogus
and it causing unnecessary splits in __asan_load1/__asan_store1.
Because of those splits kasan_report() is actually not inlined (even though
it declared as __always_inline) therefore _RET_IP_ gives us unexpected value.

This is not serious problem and we could pass _RET_IP_ directly from __asan_load1,
so it will be correct, but I prefer to disable this bogus compiler option.

GCC bugzilla entry: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63533

Signed-off-by: Andrey Ryabinin <a.ryabinin@samsung.com>
Documentation: kasan: cleanups and updates.

Major change here - added some info about inline instrumentation.

Signed-off-by: Andrey Ryabinin <a.ryabinin@samsung.com>