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

kheaders.c (1636B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * Provide kernel headers useful to build tracing programs
      4 * such as for running eBPF tracing tools.
      5 *
      6 * (Borrowed code from kernel/configs.c)
      7 */
      8
      9#include <linux/kernel.h>
     10#include <linux/module.h>
     11#include <linux/kobject.h>
     12#include <linux/init.h>
     13
     14/*
     15 * Define kernel_headers_data and kernel_headers_data_end, within which the
     16 * compressed kernel headers are stored. The file is first compressed with xz.
     17 */
     18
     19asm (
     20"	.pushsection .rodata, \"a\"		\n"
     21"	.global kernel_headers_data		\n"
     22"kernel_headers_data:				\n"
     23"	.incbin \"kernel/kheaders_data.tar.xz\"	\n"
     24"	.global kernel_headers_data_end		\n"
     25"kernel_headers_data_end:			\n"
     26"	.popsection				\n"
     27);
     28
     29extern char kernel_headers_data;
     30extern char kernel_headers_data_end;
     31
     32static ssize_t
     33ikheaders_read(struct file *file,  struct kobject *kobj,
     34	       struct bin_attribute *bin_attr,
     35	       char *buf, loff_t off, size_t len)
     36{
     37	memcpy(buf, &kernel_headers_data + off, len);
     38	return len;
     39}
     40
     41static struct bin_attribute kheaders_attr __ro_after_init = {
     42	.attr = {
     43		.name = "kheaders.tar.xz",
     44		.mode = 0444,
     45	},
     46	.read = &ikheaders_read,
     47};
     48
     49static int __init ikheaders_init(void)
     50{
     51	kheaders_attr.size = (&kernel_headers_data_end -
     52			      &kernel_headers_data);
     53	return sysfs_create_bin_file(kernel_kobj, &kheaders_attr);
     54}
     55
     56static void __exit ikheaders_cleanup(void)
     57{
     58	sysfs_remove_bin_file(kernel_kobj, &kheaders_attr);
     59}
     60
     61module_init(ikheaders_init);
     62module_exit(ikheaders_cleanup);
     63
     64MODULE_LICENSE("GPL v2");
     65MODULE_AUTHOR("Joel Fernandes");
     66MODULE_DESCRIPTION("Echo the kernel header artifacts used to build the kernel");