aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
authorAndrey Ryabinin <a.ryabinin@samsung.com>2015-02-13 17:39:49 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2015-02-14 00:21:41 -0500
commite79ed2f13faab8fc9d4ad76d5f5a241724e45836 (patch)
tree19f6192d1006345678a541c6e033393c0b2d4ed1 /mm
parentdf4c0e36f1b1782b0611a77c52cc240e5c4752dd (diff)
kmemleak: disable kasan instrumentation for kmemleak
kmalloc internally round up allocation size, and kmemleak uses rounded up size as object's size. This makes kasan to complain while kmemleak scans memory or calculates of object's checksum. The simplest solution here is to disable kasan. Signed-off-by: Andrey Ryabinin <a.ryabinin@samsung.com> Acked-by: Catalin Marinas <catalin.marinas@arm.com> Cc: Dmitry Vyukov <dvyukov@google.com> Cc: Konstantin Serebryany <kcc@google.com> Cc: Dmitry Chernenkov <dmitryc@google.com> Signed-off-by: Andrey Konovalov <adech.fo@gmail.com> Cc: Yuri Gribov <tetra2005@gmail.com> Cc: Konstantin Khlebnikov <koct9i@gmail.com> Cc: Sasha Levin <sasha.levin@oracle.com> Cc: Christoph Lameter <cl@linux.com> Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> Cc: Dave Hansen <dave.hansen@intel.com> Cc: Andi Kleen <andi@firstfloor.org> Cc: Ingo Molnar <mingo@elte.hu> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Christoph Lameter <cl@linux.com> Cc: Pekka Enberg <penberg@kernel.org> Cc: David Rientjes <rientjes@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r--mm/kmemleak.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/mm/kmemleak.c b/mm/kmemleak.c
index 3cda50c1e394..5405aff5a590 100644
--- a/mm/kmemleak.c
+++ b/mm/kmemleak.c
@@ -98,6 +98,7 @@
98#include <asm/processor.h> 98#include <asm/processor.h>
99#include <linux/atomic.h> 99#include <linux/atomic.h>
100 100
101#include <linux/kasan.h>
101#include <linux/kmemcheck.h> 102#include <linux/kmemcheck.h>
102#include <linux/kmemleak.h> 103#include <linux/kmemleak.h>
103#include <linux/memory_hotplug.h> 104#include <linux/memory_hotplug.h>
@@ -1113,7 +1114,10 @@ static bool update_checksum(struct kmemleak_object *object)
1113 if (!kmemcheck_is_obj_initialized(object->pointer, object->size)) 1114 if (!kmemcheck_is_obj_initialized(object->pointer, object->size))
1114 return false; 1115 return false;
1115 1116
1117 kasan_disable_current();
1116 object->checksum = crc32(0, (void *)object->pointer, object->size); 1118 object->checksum = crc32(0, (void *)object->pointer, object->size);
1119 kasan_enable_current();
1120
1117 return object->checksum != old_csum; 1121 return object->checksum != old_csum;
1118} 1122}
1119 1123
@@ -1164,7 +1168,9 @@ static void scan_block(void *_start, void *_end,
1164 BYTES_PER_POINTER)) 1168 BYTES_PER_POINTER))
1165 continue; 1169 continue;
1166 1170
1171 kasan_disable_current();
1167 pointer = *ptr; 1172 pointer = *ptr;
1173 kasan_enable_current();
1168 1174
1169 object = find_and_get_object(pointer, 1); 1175 object = find_and_get_object(pointer, 1);
1170 if (!object) 1176 if (!object)