bpf: Load and verify kernel module BTFs
authorAndrii Nakryiko <andrii@kernel.org>
Tue, 10 Nov 2020 01:19:31 +0000 (17:19 -0800)
committerAlexei Starovoitov <ast@kernel.org>
Tue, 10 Nov 2020 23:25:53 +0000 (15:25 -0800)
commit36e68442d1afd4f720704ee1ea8486331507e834
treead526ed86159e5d24b2a741c954f620c4987b157
parent5f9ae91f7c0dbbc4195e2a6c8eedcaeb5b9e4cbb
bpf: Load and verify kernel module BTFs

Add kernel module listener that will load/validate and unload module BTF.
Module BTFs gets ID generated for them, which makes it possible to iterate
them with existing BTF iteration API. They are given their respective module's
names, which will get reported through GET_OBJ_INFO API. They are also marked
as in-kernel BTFs for tooling to distinguish them from user-provided BTFs.

Also, similarly to vmlinux BTF, kernel module BTFs are exposed through
sysfs as /sys/kernel/btf/<module-name>. This is convenient for user-space
tools to inspect module BTF contents and dump their types with existing tools:

[vmuser@archvm bpf]$ ls -la /sys/kernel/btf
total 0
drwxr-xr-x  2 root root       0 Nov  4 19:46 .
drwxr-xr-x 13 root root       0 Nov  4 19:46 ..

...

-r--r--r--  1 root root     888 Nov  4 19:46 irqbypass
-r--r--r--  1 root root  100225 Nov  4 19:46 kvm
-r--r--r--  1 root root   35401 Nov  4 19:46 kvm_intel
-r--r--r--  1 root root     120 Nov  4 19:46 pcspkr
-r--r--r--  1 root root     399 Nov  4 19:46 serio_raw
-r--r--r--  1 root root 4094095 Nov  4 19:46 vmlinux

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Link: https://lore.kernel.org/bpf/20201110011932.3201430-5-andrii@kernel.org
Documentation/ABI/testing/sysfs-kernel-btf
include/linux/bpf.h
include/linux/module.h
kernel/bpf/btf.c
kernel/bpf/sysfs_btf.c
kernel/module.c