mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	kheaders: Move from proc to sysfs
The kheaders archive consisting of the kernel headers used for compiling bpf programs is in /proc. However there is concern that moving it here will make it permanent. Let us move it to /sys/kernel as discussed [1]. [1] https://lore.kernel.org/patchwork/patch/1067310/#1265969 Suggested-by: Steven Rostedt <rostedt@goodmis.org> Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
		
							parent
							
								
									a188339ca5
								
							
						
					
					
						commit
						f7b101d330
					
				
					 4 changed files with 26 additions and 35 deletions
				
			
		
							
								
								
									
										15
									
								
								init/Kconfig
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								init/Kconfig
									
									
									
									
									
								
							|  | @ -579,15 +579,14 @@ config IKCONFIG_PROC | |||
| 	  This option enables access to the kernel configuration file | ||||
| 	  through /proc/config.gz. | ||||
| 
 | ||||
| config IKHEADERS_PROC | ||||
| 	tristate "Enable kernel header artifacts through /proc/kheaders.tar.xz" | ||||
| 	depends on PROC_FS | ||||
| config IKHEADERS | ||||
| 	tristate "Enable kernel headers through /sys/kernel/kheaders.tar.xz" | ||||
| 	depends on SYSFS | ||||
| 	help | ||||
| 	  This option enables access to the kernel header and other artifacts that | ||||
| 	  are generated during the build process. These can be used to build eBPF | ||||
| 	  tracing programs, or similar programs.  If you build the headers as a | ||||
| 	  module, a module called kheaders.ko is built which can be loaded on-demand | ||||
| 	  to get access to the headers. | ||||
| 	  This option enables access to the in-kernel headers that are generated during | ||||
| 	  the build process. These can be used to build eBPF tracing programs, | ||||
| 	  or similar programs.  If you build the headers as a module, a module called | ||||
| 	  kheaders.ko is built which can be loaded on-demand to get access to headers. | ||||
| 
 | ||||
| config LOG_BUF_SHIFT | ||||
| 	int "Kernel log buffer size (16 => 64KB, 17 => 128KB)" | ||||
|  |  | |||
|  | @ -71,7 +71,7 @@ obj-$(CONFIG_UTS_NS) += utsname.o | |||
| obj-$(CONFIG_USER_NS) += user_namespace.o | ||||
| obj-$(CONFIG_PID_NS) += pid_namespace.o | ||||
| obj-$(CONFIG_IKCONFIG) += configs.o | ||||
| obj-$(CONFIG_IKHEADERS_PROC) += kheaders.o | ||||
| obj-$(CONFIG_IKHEADERS) += kheaders.o | ||||
| obj-$(CONFIG_SMP) += stop_machine.o | ||||
| obj-$(CONFIG_KPROBES_SANITY_TEST) += test_kprobes.o | ||||
| obj-$(CONFIG_AUDIT) += audit.o auditfilter.o | ||||
|  | @ -127,7 +127,7 @@ $(obj)/config_data.gz: $(KCONFIG_CONFIG) FORCE | |||
| $(obj)/kheaders.o: $(obj)/kheaders_data.tar.xz | ||||
| 
 | ||||
| quiet_cmd_genikh = CHK     $(obj)/kheaders_data.tar.xz | ||||
| cmd_genikh = $(CONFIG_SHELL) $(srctree)/kernel/gen_ikh_data.sh $@ | ||||
| cmd_genikh = $(CONFIG_SHELL) $(srctree)/kernel/gen_kheaders.sh $@ | ||||
| $(obj)/kheaders_data.tar.xz: FORCE | ||||
| 	$(call cmd,genikh) | ||||
| 
 | ||||
|  |  | |||
|  | @ -2,7 +2,7 @@ | |||
| # SPDX-License-Identifier: GPL-2.0 | ||||
| 
 | ||||
| # This script generates an archive consisting of kernel headers | ||||
| # for CONFIG_IKHEADERS_PROC. | ||||
| # for CONFIG_IKHEADERS. | ||||
| set -e | ||||
| spath="$(dirname "$(readlink -f "$0")")" | ||||
| kroot="$spath/.." | ||||
|  | @ -8,9 +8,8 @@ | |||
| 
 | ||||
| #include <linux/kernel.h> | ||||
| #include <linux/module.h> | ||||
| #include <linux/proc_fs.h> | ||||
| #include <linux/kobject.h> | ||||
| #include <linux/init.h> | ||||
| #include <linux/uaccess.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * Define kernel_headers_data and kernel_headers_data_end, within which the | ||||
|  | @ -31,39 +30,32 @@ extern char kernel_headers_data; | |||
| extern char kernel_headers_data_end; | ||||
| 
 | ||||
| static ssize_t | ||||
| ikheaders_read_current(struct file *file, char __user *buf, | ||||
| 		      size_t len, loff_t *offset) | ||||
| ikheaders_read(struct file *file,  struct kobject *kobj, | ||||
| 	       struct bin_attribute *bin_attr, | ||||
| 	       char *buf, loff_t off, size_t len) | ||||
| { | ||||
| 	return simple_read_from_buffer(buf, len, offset, | ||||
| 				       &kernel_headers_data, | ||||
| 				       &kernel_headers_data_end - | ||||
| 				       &kernel_headers_data); | ||||
| 	memcpy(buf, &kernel_headers_data + off, len); | ||||
| 	return len; | ||||
| } | ||||
| 
 | ||||
| static const struct file_operations ikheaders_file_ops = { | ||||
| 	.read = ikheaders_read_current, | ||||
| 	.llseek = default_llseek, | ||||
| static struct bin_attribute kheaders_attr __ro_after_init = { | ||||
| 	.attr = { | ||||
| 		.name = "kheaders.tar.xz", | ||||
| 		.mode = 0444, | ||||
| 	}, | ||||
| 	.read = &ikheaders_read, | ||||
| }; | ||||
| 
 | ||||
| static int __init ikheaders_init(void) | ||||
| { | ||||
| 	struct proc_dir_entry *entry; | ||||
| 
 | ||||
| 	/* create the current headers file */ | ||||
| 	entry = proc_create("kheaders.tar.xz", S_IRUGO, NULL, | ||||
| 			    &ikheaders_file_ops); | ||||
| 	if (!entry) | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
| 	proc_set_size(entry, | ||||
| 		      &kernel_headers_data_end - | ||||
| 		      &kernel_headers_data); | ||||
| 	return 0; | ||||
| 	kheaders_attr.size = (&kernel_headers_data_end - | ||||
| 			      &kernel_headers_data); | ||||
| 	return sysfs_create_bin_file(kernel_kobj, &kheaders_attr); | ||||
| } | ||||
| 
 | ||||
| static void __exit ikheaders_cleanup(void) | ||||
| { | ||||
| 	remove_proc_entry("kheaders.tar.xz", NULL); | ||||
| 	sysfs_remove_bin_file(kernel_kobj, &kheaders_attr); | ||||
| } | ||||
| 
 | ||||
| module_init(ikheaders_init); | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Joel Fernandes (Google)
						Joel Fernandes (Google)