cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

debug_pagetables.c (1815B)


      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
      8static 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
     14DEFINE_SHOW_ATTRIBUTE(ptdump);
     15
     16static 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
     23DEFINE_SHOW_ATTRIBUTE(ptdump_curknl);
     24
     25#ifdef CONFIG_PAGE_TABLE_ISOLATION
     26static 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
     33DEFINE_SHOW_ATTRIBUTE(ptdump_curusr);
     34#endif
     35
     36#if defined(CONFIG_EFI) && defined(CONFIG_X86_64)
     37static 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
     44DEFINE_SHOW_ATTRIBUTE(ptdump_efi);
     45#endif
     46
     47static struct dentry *dir;
     48
     49static 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_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
     67static void __exit pt_dump_debug_exit(void)
     68{
     69	debugfs_remove_recursive(dir);
     70}
     71
     72module_init(pt_dump_debug_init);
     73module_exit(pt_dump_debug_exit);
     74MODULE_LICENSE("GPL");
     75MODULE_AUTHOR("Arjan van de Ven <arjan@linux.intel.com>");
     76MODULE_DESCRIPTION("Kernel debugging helper that dumps pagetables");