Test kasan vmalloc support by adding a new test to the module.

Signed-off-by: Daniel Axtens <d...@axtens.net>

--

v5: split out per Christophe Leroy
---
 lib/test_kasan.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git lib/test_kasan.c lib/test_kasan.c
index 49cc4d570a40..328d33beae36 100644
--- lib/test_kasan.c
+++ lib/test_kasan.c
@@ -19,6 +19,7 @@
 #include <linux/string.h>
 #include <linux/uaccess.h>
 #include <linux/io.h>
+#include <linux/vmalloc.h>
 
 #include <asm/page.h>
 
@@ -748,6 +749,30 @@ static noinline void __init kmalloc_double_kzfree(void)
        kzfree(ptr);
 }
 
+#ifdef CONFIG_KASAN_VMALLOC
+static noinline void __init vmalloc_oob(void)
+{
+       void *area;
+
+       pr_info("vmalloc out-of-bounds\n");
+
+       /*
+        * We have to be careful not to hit the guard page.
+        * The MMU will catch that and crash us.
+        */
+       area = vmalloc(3000);
+       if (!area) {
+               pr_err("Allocation failed\n");
+               return;
+       }
+
+       ((volatile char *)area)[3100];
+       vfree(area);
+}
+#else
+static void __init vmalloc_oob(void) {}
+#endif
+
 static int __init kmalloc_tests_init(void)
 {
        /*
@@ -793,6 +818,7 @@ static int __init kmalloc_tests_init(void)
        kasan_strings();
        kasan_bitops();
        kmalloc_double_kzfree();
+       vmalloc_oob();
 
        kasan_restore_multi_shot(multishot);
 
-- 
2.20.1

Reply via email to