[Devel] [PATCH RHEL7 COMMIT] ms/mm/kasan: add API to check memory regions

Konstantin Khorenko khorenko at virtuozzo.com
Fri May 27 02:00:07 PDT 2016


The commit is pushed to "branch-rh7-3.10.0-327.18.2.vz7.14.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-327.18.2.vz7.14.8
------>
commit d190154a4e62efafcf66ed9384380ca90ea66ab4
Author: Andrey Ryabinin <aryabinin at virtuozzo.com>
Date:   Fri May 27 13:00:07 2016 +0400

    ms/mm/kasan: add API to check memory regions
    
    ms commit 64f8ebaf115bcddc4aaa902f981c57ba6506bc42
    
    Memory access coded in an assembly won't be seen by KASAN as a compiler
    can instrument only C code.  Add kasan_check_[read,write]() API which is
    going to be used to check a certain memory range.
    
    Link: http://lkml.kernel.org/r/1462538722-1574-3-git-send-email-aryabinin@virtuocom
    Signed-off-by: Andrey Ryabinin <aryabinin at virtuozzo.com>
    
    Acked-by: Alexander Potapenko <glider at google.com>
    Cc: Dmitry Vyukov <dvyukov at google.com>
    Cc: Ingo Molnar <mingo at elte.hu>
    Cc: "H. Peter Anvin" <hpa at zytor.com>
    Cc: Thomas Gleixner <tglx at linutronix.de>
    Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
---
 include/linux/kasan-checks.h | 12 ++++++++++++
 mm/kasan/kasan.c             | 12 ++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/include/linux/kasan-checks.h b/include/linux/kasan-checks.h
new file mode 100644
index 0000000..b7f8ace
--- /dev/null
+++ b/include/linux/kasan-checks.h
@@ -0,0 +1,12 @@
+#ifndef _LINUX_KASAN_CHECKS_H
+#define _LINUX_KASAN_CHECKS_H
+
+#ifdef CONFIG_KASAN
+void kasan_check_read(const void *p, unsigned int size);
+void kasan_check_write(const void *p, unsigned int size);
+#else
+static inline void kasan_check_read(const void *p, unsigned int size) { }
+static inline void kasan_check_write(const void *p, unsigned int size) { }
+#endif
+
+#endif
diff --git a/mm/kasan/kasan.c b/mm/kasan/kasan.c
index 87ebcaf..3873c2c 100644
--- a/mm/kasan/kasan.c
+++ b/mm/kasan/kasan.c
@@ -259,6 +259,18 @@ static void check_memory_region(unsigned long addr,
 	check_memory_region_inline(addr, size, write, ret_ip);
 }
 
+void kasan_check_read(const void *p, unsigned int size)
+{
+	check_memory_region((unsigned long)p, size, false, _RET_IP_);
+}
+EXPORT_SYMBOL(kasan_check_read);
+
+void kasan_check_write(const void *p, unsigned int size)
+{
+	check_memory_region((unsigned long)p, size, true, _RET_IP_);
+}
+EXPORT_SYMBOL(kasan_check_write);
+
 #undef memset
 void *memset(void *addr, int c, size_t len)
 {


More information about the Devel mailing list