summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Fainelli <f.fainelli@gmail.com>2017-09-08 19:15:31 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2017-09-08 21:26:49 -0400
commite4dace3615526fd66c86dd535ee4bc9e8c706e37 (patch)
tree48e3720ba8cebfba4d4c3ed753025a1854b9a758
parent9888a588ea96ba2804f955bbc2667346719da887 (diff)
lib: add test module for CONFIG_DEBUG_VIRTUAL
Add a test module that allows testing that CONFIG_DEBUG_VIRTUAL works correctly, at least that it can catch invalid calls to virt_to_phys() against the non-linear kernel virtual address map. Link: http://lkml.kernel.org/r/20170808164035.26725-1-f.fainelli@gmail.com Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Cc: "Luis R. Rodriguez" <mcgrof@kernel.org> Cc: Kees Cook <keescook@chromium.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--lib/Kconfig.debug11
-rw-r--r--lib/Makefile1
-rw-r--r--lib/test_debug_virtual.c49
3 files changed, 61 insertions, 0 deletions
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 7396f5044397..b19c491cbc4e 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -1930,6 +1930,17 @@ config TEST_KMOD
1930 1930
1931 If unsure, say N. 1931 If unsure, say N.
1932 1932
1933config TEST_DEBUG_VIRTUAL
1934 tristate "Test CONFIG_DEBUG_VIRTUAL feature"
1935 depends on DEBUG_VIRTUAL
1936 help
1937 Test the kernel's ability to detect incorrect calls to
1938 virt_to_phys() done against the non-linear part of the
1939 kernel's virtual address map.
1940
1941 If unsure, say N.
1942
1943
1933source "samples/Kconfig" 1944source "samples/Kconfig"
1934 1945
1935source "lib/Kconfig.kgdb" 1946source "lib/Kconfig.kgdb"
diff --git a/lib/Makefile b/lib/Makefile
index 40c18372b301..469ce5e24e4f 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -62,6 +62,7 @@ obj-$(CONFIG_TEST_BITMAP) += test_bitmap.o
62obj-$(CONFIG_TEST_UUID) += test_uuid.o 62obj-$(CONFIG_TEST_UUID) += test_uuid.o
63obj-$(CONFIG_TEST_PARMAN) += test_parman.o 63obj-$(CONFIG_TEST_PARMAN) += test_parman.o
64obj-$(CONFIG_TEST_KMOD) += test_kmod.o 64obj-$(CONFIG_TEST_KMOD) += test_kmod.o
65obj-$(CONFIG_TEST_DEBUG_VIRTUAL) += test_debug_virtual.o
65 66
66ifeq ($(CONFIG_DEBUG_KOBJECT),y) 67ifeq ($(CONFIG_DEBUG_KOBJECT),y)
67CFLAGS_kobject.o += -DDEBUG 68CFLAGS_kobject.o += -DDEBUG
diff --git a/lib/test_debug_virtual.c b/lib/test_debug_virtual.c
new file mode 100644
index 000000000000..b9cdeecc19dc
--- /dev/null
+++ b/lib/test_debug_virtual.c
@@ -0,0 +1,49 @@
1#include <linux/kernel.h>
2#include <linux/module.h>
3#include <linux/export.h>
4#include <linux/mm.h>
5#include <linux/vmalloc.h>
6#include <linux/slab.h>
7#include <linux/sizes.h>
8
9#include <asm/page.h>
10#ifdef CONFIG_MIPS
11#include <asm/bootinfo.h>
12#endif
13
14struct foo {
15 unsigned int bar;
16};
17
18struct foo *foo;
19
20static int __init test_debug_virtual_init(void)
21{
22 phys_addr_t pa;
23 void *va;
24
25 va = (void *)VMALLOC_START;
26 pa = virt_to_phys(va);
27
28 pr_info("PA: %pa for VA: 0x%lx\n", &pa, (unsigned long)va);
29
30 foo = kzalloc(sizeof(*foo), GFP_KERNEL);
31 if (!foo)
32 return -ENOMEM;
33
34 pa = virt_to_phys(foo);
35 va = foo;
36 pr_info("PA: %pa for VA: 0x%lx\n", &pa, (unsigned long)va);
37
38 return 0;
39}
40module_init(test_debug_virtual_init);
41
42static void __exit test_debug_virtual_exit(void)
43{
44 kfree(foo);
45}
46module_exit(test_debug_virtual_exit);
47
48MODULE_LICENSE("GPL");
49MODULE_DESCRIPTION("Test module for CONFIG_DEBUG_VIRTUAL");