]>
Commit | Line | Data |
---|---|---|
43d8ce9d JFG |
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> | |
f7b101d3 | 11 | #include <linux/kobject.h> |
43d8ce9d | 12 | #include <linux/init.h> |
43d8ce9d JFG |
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 | ||
19 | asm ( | |
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 | ||
29 | extern char kernel_headers_data; | |
30 | extern char kernel_headers_data_end; | |
31 | ||
32 | static ssize_t | |
f7b101d3 JFG |
33 | ikheaders_read(struct file *file, struct kobject *kobj, |
34 | struct bin_attribute *bin_attr, | |
35 | char *buf, loff_t off, size_t len) | |
43d8ce9d | 36 | { |
f7b101d3 JFG |
37 | memcpy(buf, &kernel_headers_data + off, len); |
38 | return len; | |
43d8ce9d JFG |
39 | } |
40 | ||
f7b101d3 JFG |
41 | static struct bin_attribute kheaders_attr __ro_after_init = { |
42 | .attr = { | |
43 | .name = "kheaders.tar.xz", | |
44 | .mode = 0444, | |
45 | }, | |
46 | .read = &ikheaders_read, | |
43d8ce9d JFG |
47 | }; |
48 | ||
49 | static int __init ikheaders_init(void) | |
50 | { | |
f7b101d3 JFG |
51 | kheaders_attr.size = (&kernel_headers_data_end - |
52 | &kernel_headers_data); | |
53 | return sysfs_create_bin_file(kernel_kobj, &kheaders_attr); | |
43d8ce9d JFG |
54 | } |
55 | ||
56 | static void __exit ikheaders_cleanup(void) | |
57 | { | |
f7b101d3 | 58 | sysfs_remove_bin_file(kernel_kobj, &kheaders_attr); |
43d8ce9d JFG |
59 | } |
60 | ||
61 | module_init(ikheaders_init); | |
62 | module_exit(ikheaders_cleanup); | |
63 | ||
64 | MODULE_LICENSE("GPL v2"); | |
65 | MODULE_AUTHOR("Joel Fernandes"); | |
66 | MODULE_DESCRIPTION("Echo the kernel header artifacts used to build the kernel"); |