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

configs.c (2054B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * kernel/configs.c
      4 * Echo the kernel .config file used to build the kernel
      5 *
      6 * Copyright (C) 2002 Khalid Aziz <khalid_aziz@hp.com>
      7 * Copyright (C) 2002 Randy Dunlap <rdunlap@xenotime.net>
      8 * Copyright (C) 2002 Al Stone <ahs3@fc.hp.com>
      9 * Copyright (C) 2002 Hewlett-Packard Company
     10 */
     11
     12#include <linux/kernel.h>
     13#include <linux/module.h>
     14#include <linux/proc_fs.h>
     15#include <linux/seq_file.h>
     16#include <linux/init.h>
     17#include <linux/uaccess.h>
     18
     19/*
     20 * "IKCFG_ST" and "IKCFG_ED" are used to extract the config data from
     21 * a binary kernel image or a module. See scripts/extract-ikconfig.
     22 */
     23asm (
     24"	.pushsection .rodata, \"a\"		\n"
     25"	.ascii \"IKCFG_ST\"			\n"
     26"	.global kernel_config_data		\n"
     27"kernel_config_data:				\n"
     28"	.incbin \"kernel/config_data.gz\"	\n"
     29"	.global kernel_config_data_end		\n"
     30"kernel_config_data_end:			\n"
     31"	.ascii \"IKCFG_ED\"			\n"
     32"	.popsection				\n"
     33);
     34
     35#ifdef CONFIG_IKCONFIG_PROC
     36
     37extern char kernel_config_data;
     38extern char kernel_config_data_end;
     39
     40static ssize_t
     41ikconfig_read_current(struct file *file, char __user *buf,
     42		      size_t len, loff_t * offset)
     43{
     44	return simple_read_from_buffer(buf, len, offset,
     45				       &kernel_config_data,
     46				       &kernel_config_data_end -
     47				       &kernel_config_data);
     48}
     49
     50static const struct proc_ops config_gz_proc_ops = {
     51	.proc_read	= ikconfig_read_current,
     52	.proc_lseek	= default_llseek,
     53};
     54
     55static int __init ikconfig_init(void)
     56{
     57	struct proc_dir_entry *entry;
     58
     59	/* create the current config file */
     60	entry = proc_create("config.gz", S_IFREG | S_IRUGO, NULL,
     61			    &config_gz_proc_ops);
     62	if (!entry)
     63		return -ENOMEM;
     64
     65	proc_set_size(entry, &kernel_config_data_end - &kernel_config_data);
     66
     67	return 0;
     68}
     69
     70static void __exit ikconfig_cleanup(void)
     71{
     72	remove_proc_entry("config.gz", NULL);
     73}
     74
     75module_init(ikconfig_init);
     76module_exit(ikconfig_cleanup);
     77
     78#endif /* CONFIG_IKCONFIG_PROC */
     79
     80MODULE_LICENSE("GPL");
     81MODULE_AUTHOR("Randy Dunlap");
     82MODULE_DESCRIPTION("Echo the kernel .config file used to build the kernel");