Thread (30 messages) 30 messages, 6 authors, 2016-03-11

Re: [PATCH v4 5/7] mm, kasan: Stackdepot implementation. Enable stackdepot for SLAB

From: Andrey Ryabinin <ryabinin.a.a@gmail.com>
Date: 2016-03-04 16:30:32
Also in: lkml

2016-03-04 18:06 GMT+03:00 Alexander Potapenko [off-list ref]:
On Fri, Mar 4, 2016 at 4:01 PM, Andrey Ryabinin [off-list ref] wrote:
quoted
2016-03-04 17:52 GMT+03:00 Alexander Potapenko [off-list ref]:
quoted
On Tue, Mar 1, 2016 at 12:57 PM, Andrey Ryabinin [off-list ref] wrote:
quoted
quoted
quoted
quoted
+
+     stack->hash = hash;
+     stack->size = size;
+     stack->handle.slabindex = depot_index;
+     stack->handle.offset = depot_offset >> STACK_ALLOC_ALIGN;
+     __memcpy(stack->entries, entries, size * sizeof(unsigned long));
s/__memcpy/memcpy/
memcpy should be instrumented by asan/tsan, and we would like to avoid
that instrumentation here.
KASAN_SANITIZE_* := n already takes care about this.
__memcpy() is a special thing solely for kasan internals and some assembly code.
And it's not available generally.
As far as I can see, KASAN_SANITIZE_*:=n does not guarantee it.
It just removes KASAN flags from GCC command line, it does not
necessarily replace memcpy() calls with some kind of a
non-instrumented memcpy().
With removed kasan cflags '__SANITIZE_ADDRESS__' is not defined,
hence enable the following defines from arch/x86/include/asm/string_64.h:

#if defined(CONFIG_KASAN) && !defined(__SANITIZE_ADDRESS__)

/*
 * For files that not instrumented (e.g. mm/slub.c) we
 * should use not instrumented version of mem* functions.
 */

#undef memcpy
#define memcpy(dst, src, len) __memcpy(dst, src, len)
#define memmove(dst, src, len) __memmove(dst, src, len)
#define memset(s, c, n) __memset(s, c, n)
#endif
Nice!
What do you think about providing stub .c files to decouple the shared
code used by KASAN runtime from the rest of kernel?
Actually, I'm not quite understand why you need that at all, but your
idea will not link due to multiple definitions of the same functions.
Link problem should be easy to workaround with 'objcopy
--prefix-symbol=' though.
(This is a completely different story though and can be done separately).


--
Alexander Potapenko
Software Engineer

Google Germany GmbH
Erika-Mann-Straße, 33
80636 München

Geschäftsführer: Matthew Scott Sucherman, Paul Terence Manicle
Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help