diff options
author | Florian Fainelli <f.fainelli@gmail.com> | 2017-09-08 19:15:31 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-09-08 21:26:49 -0400 |
commit | e4dace3615526fd66c86dd535ee4bc9e8c706e37 (patch) | |
tree | 48e3720ba8cebfba4d4c3ed753025a1854b9a758 /lib/test_debug_virtual.c | |
parent | 9888a588ea96ba2804f955bbc2667346719da887 (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>
Diffstat (limited to 'lib/test_debug_virtual.c')
-rw-r--r-- | lib/test_debug_virtual.c | 49 |
1 files changed, 49 insertions, 0 deletions
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 | |||
14 | struct foo { | ||
15 | unsigned int bar; | ||
16 | }; | ||
17 | |||
18 | struct foo *foo; | ||
19 | |||
20 | static 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 | } | ||
40 | module_init(test_debug_virtual_init); | ||
41 | |||
42 | static void __exit test_debug_virtual_exit(void) | ||
43 | { | ||
44 | kfree(foo); | ||
45 | } | ||
46 | module_exit(test_debug_virtual_exit); | ||
47 | |||
48 | MODULE_LICENSE("GPL"); | ||
49 | MODULE_DESCRIPTION("Test module for CONFIG_DEBUG_VIRTUAL"); | ||