lkml.org 
[lkml]   [2014]   [Sep]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC/PATCH v2 09/10] kmemleak: disable kasan instrumentation for kmemleak
    Date
    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


    \
     
     \ /
      Last update: 2014-09-10 17:21    [W:2.074 / U:6.284 seconds]
    ©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site