Message ID | 20190506013456.86061-1-joel@joelfernandes.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [v3] kheaders: Move from proc to sysfs | expand |
On Mon, May 6, 2019 at 10:37 AM Joel Fernandes (Google) <joel@joelfernandes.org> wrote: > > 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> > --- > This patch applies on top of the previous patch that was applied to the > driver tree: > https://lore.kernel.org/patchwork/patch/1067310/ > > v2->v3: Fixed sysfs file mode nit (Greg). > v1->v2: Fixed some kconfig nits. > > init/Kconfig | 16 ++++----- > kernel/Makefile | 4 +-- > kernel/{gen_ikh_data.sh => gen_kheaders.sh} | 2 +- > kernel/kheaders.c | 40 +++++++++------------ > 4 files changed, 26 insertions(+), 36 deletions(-) > rename kernel/{gen_ikh_data.sh => gen_kheaders.sh} (98%) > > diff --git a/init/Kconfig b/init/Kconfig > index 26a364a95b57..c3661991b089 100644 > --- a/init/Kconfig > +++ b/init/Kconfig > @@ -579,15 +579,13 @@ 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 > - 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. > +config IKHEADERS > + tristate "Enable kernel headers through /sys/kernel/kheaders.tar.xz" I suggested "depends on SYSFS" twice, both in v1 and v2. https://lore.kernel.org/patchwork/patch/1069806/#1266147 https://lore.kernel.org/patchwork/patch/1070005/#1266279 > + help > + 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)"
On Wed, May 08, 2019 at 12:43:34PM +0900, Masahiro Yamada wrote: > On Mon, May 6, 2019 at 10:37 AM Joel Fernandes (Google) > <joel@joelfernandes.org> wrote: > > > > 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> > > --- > > This patch applies on top of the previous patch that was applied to the > > driver tree: > > https://lore.kernel.org/patchwork/patch/1067310/ > > > > v2->v3: Fixed sysfs file mode nit (Greg). > > v1->v2: Fixed some kconfig nits. > > > > init/Kconfig | 16 ++++----- > > kernel/Makefile | 4 +-- > > kernel/{gen_ikh_data.sh => gen_kheaders.sh} | 2 +- > > kernel/kheaders.c | 40 +++++++++------------ > > 4 files changed, 26 insertions(+), 36 deletions(-) > > rename kernel/{gen_ikh_data.sh => gen_kheaders.sh} (98%) > > > > diff --git a/init/Kconfig b/init/Kconfig > > index 26a364a95b57..c3661991b089 100644 > > --- a/init/Kconfig > > +++ b/init/Kconfig > > @@ -579,15 +579,13 @@ 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 > > - 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. > > +config IKHEADERS > > + tristate "Enable kernel headers through /sys/kernel/kheaders.tar.xz" > > > I suggested "depends on SYSFS" twice, both in v1 and v2. > > https://lore.kernel.org/patchwork/patch/1069806/#1266147 > https://lore.kernel.org/patchwork/patch/1070005/#1266279 Sorry about missing that. I have made a note of this, and can address it in a later patch. There is a more pressing issue with allmodconfig regression times so I will look into that first. Also a vacation is taking up some of my time. Needless to say I will get to it soon and the point has been duly noted! thanks, - Joel
diff --git a/init/Kconfig b/init/Kconfig index 26a364a95b57..c3661991b089 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -579,15 +579,13 @@ 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 - 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. +config IKHEADERS + tristate "Enable kernel headers through /sys/kernel/kheaders.tar.xz" + help + 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)" diff --git a/kernel/Makefile b/kernel/Makefile index 12399614c350..b32a558fae2f 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -70,7 +70,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 @@ -126,7 +126,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 = $(srctree)/kernel/gen_ikh_data.sh $@ +cmd_genikh = $(srctree)/kernel/gen_kheaders.sh $@ $(obj)/kheaders_data.tar.xz: FORCE $(call cmd,genikh) diff --git a/kernel/gen_ikh_data.sh b/kernel/gen_kheaders.sh similarity index 98% rename from kernel/gen_ikh_data.sh rename to kernel/gen_kheaders.sh index 591a94f7b387..581b83534587 100755 --- a/kernel/gen_ikh_data.sh +++ b/kernel/gen_kheaders.sh @@ -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/.." diff --git a/kernel/kheaders.c b/kernel/kheaders.c index 70ae6052920d..8f69772af77b 100644 --- a/kernel/kheaders.c +++ b/kernel/kheaders.c @@ -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);
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> --- This patch applies on top of the previous patch that was applied to the driver tree: https://lore.kernel.org/patchwork/patch/1067310/ v2->v3: Fixed sysfs file mode nit (Greg). v1->v2: Fixed some kconfig nits. init/Kconfig | 16 ++++----- kernel/Makefile | 4 +-- kernel/{gen_ikh_data.sh => gen_kheaders.sh} | 2 +- kernel/kheaders.c | 40 +++++++++------------ 4 files changed, 26 insertions(+), 36 deletions(-) rename kernel/{gen_ikh_data.sh => gen_kheaders.sh} (98%)