| From | Andrey Ryabinin <> | Subject | [RFC/PATCH v2 09/10] kmemleak: disable kasan instrumentation for kmemleak | Date | Wed, 10 Sep 2014 18:31:26 +0400 |
| |
kmemleak scans all memory while searching for pointers to objects. So function scan_block could access kasan's shadow memory region while searching for pointer.
Also kmalloc internally round up allocation size, and kmemleak uses rounded up size as size of object. This makes kasan to complain while calculation of object's checksum. The simplest solution here is to disable kasan.
Signed-off-by: Andrey Ryabinin <a.ryabinin@samsung.com> --- mm/kmemleak.c | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/mm/kmemleak.c b/mm/kmemleak.c index 3cda50c..9bda1b3 100644 --- a/mm/kmemleak.c +++ b/mm/kmemleak.c @@ -98,6 +98,7 @@ #include <asm/processor.h> #include <linux/atomic.h> +#include <linux/kasan.h> #include <linux/kmemcheck.h> #include <linux/kmemleak.h> #include <linux/memory_hotplug.h> @@ -1113,7 +1114,10 @@ static bool update_checksum(struct kmemleak_object *object) if (!kmemcheck_is_obj_initialized(object->pointer, object->size)) return false; + kasan_disable_local(); object->checksum = crc32(0, (void *)object->pointer, object->size); + kasan_enable_local(); + return object->checksum != old_csum; } @@ -1164,7 +1168,9 @@ static void scan_block(void *_start, void *_end, BYTES_PER_POINTER)) continue; + kasan_disable_local(); pointer = *ptr; + kasan_enable_local(); object = find_and_get_object(pointer, 1); if (!object) -- 1.8.5.5
|