Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/x86/mm/debug_pagetables.c
26424 views
1
// SPDX-License-Identifier: GPL-2.0-only
2
#include <linux/debugfs.h>
3
#include <linux/efi.h>
4
#include <linux/module.h>
5
#include <linux/seq_file.h>
6
#include <linux/pgtable.h>
7
8
static int ptdump_show(struct seq_file *m, void *v)
9
{
10
ptdump_walk_pgd_level_debugfs(m, &init_mm, false);
11
return 0;
12
}
13
14
DEFINE_SHOW_ATTRIBUTE(ptdump);
15
16
static int ptdump_curknl_show(struct seq_file *m, void *v)
17
{
18
if (current->mm->pgd)
19
ptdump_walk_pgd_level_debugfs(m, current->mm, false);
20
return 0;
21
}
22
23
DEFINE_SHOW_ATTRIBUTE(ptdump_curknl);
24
25
#ifdef CONFIG_MITIGATION_PAGE_TABLE_ISOLATION
26
static int ptdump_curusr_show(struct seq_file *m, void *v)
27
{
28
if (current->mm->pgd)
29
ptdump_walk_pgd_level_debugfs(m, current->mm, true);
30
return 0;
31
}
32
33
DEFINE_SHOW_ATTRIBUTE(ptdump_curusr);
34
#endif
35
36
#if defined(CONFIG_EFI) && defined(CONFIG_X86_64)
37
static int ptdump_efi_show(struct seq_file *m, void *v)
38
{
39
if (efi_mm.pgd)
40
ptdump_walk_pgd_level_debugfs(m, &efi_mm, false);
41
return 0;
42
}
43
44
DEFINE_SHOW_ATTRIBUTE(ptdump_efi);
45
#endif
46
47
static struct dentry *dir;
48
49
static int __init pt_dump_debug_init(void)
50
{
51
dir = debugfs_create_dir("page_tables", NULL);
52
53
debugfs_create_file("kernel", 0400, dir, NULL, &ptdump_fops);
54
debugfs_create_file("current_kernel", 0400, dir, NULL,
55
&ptdump_curknl_fops);
56
57
#ifdef CONFIG_MITIGATION_PAGE_TABLE_ISOLATION
58
debugfs_create_file("current_user", 0400, dir, NULL,
59
&ptdump_curusr_fops);
60
#endif
61
#if defined(CONFIG_EFI) && defined(CONFIG_X86_64)
62
debugfs_create_file("efi", 0400, dir, NULL, &ptdump_efi_fops);
63
#endif
64
return 0;
65
}
66
67
static void __exit pt_dump_debug_exit(void)
68
{
69
debugfs_remove_recursive(dir);
70
}
71
72
module_init(pt_dump_debug_init);
73
module_exit(pt_dump_debug_exit);
74
MODULE_AUTHOR("Arjan van de Ven <[email protected]>");
75
MODULE_DESCRIPTION("Kernel debugging helper that dumps pagetables");
76
77