diff options
Diffstat (limited to 'kernel/bpf/syscall.c')
-rw-r--r-- | kernel/bpf/syscall.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index 4ca46df19c9a..cd8ebadc66eb 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c | |||
@@ -11,6 +11,7 @@ | |||
11 | */ | 11 | */ |
12 | #include <linux/bpf.h> | 12 | #include <linux/bpf.h> |
13 | #include <linux/bpf_trace.h> | 13 | #include <linux/bpf_trace.h> |
14 | #include <linux/btf.h> | ||
14 | #include <linux/syscalls.h> | 15 | #include <linux/syscalls.h> |
15 | #include <linux/slab.h> | 16 | #include <linux/slab.h> |
16 | #include <linux/sched/signal.h> | 17 | #include <linux/sched/signal.h> |
@@ -2023,6 +2024,19 @@ static int bpf_obj_get_info_by_fd(const union bpf_attr *attr, | |||
2023 | return err; | 2024 | return err; |
2024 | } | 2025 | } |
2025 | 2026 | ||
2027 | #define BPF_BTF_LOAD_LAST_FIELD btf_log_level | ||
2028 | |||
2029 | static int bpf_btf_load(const union bpf_attr *attr) | ||
2030 | { | ||
2031 | if (CHECK_ATTR(BPF_BTF_LOAD)) | ||
2032 | return -EINVAL; | ||
2033 | |||
2034 | if (!capable(CAP_SYS_ADMIN)) | ||
2035 | return -EPERM; | ||
2036 | |||
2037 | return btf_new_fd(attr); | ||
2038 | } | ||
2039 | |||
2026 | SYSCALL_DEFINE3(bpf, int, cmd, union bpf_attr __user *, uattr, unsigned int, size) | 2040 | SYSCALL_DEFINE3(bpf, int, cmd, union bpf_attr __user *, uattr, unsigned int, size) |
2027 | { | 2041 | { |
2028 | union bpf_attr attr = {}; | 2042 | union bpf_attr attr = {}; |
@@ -2103,6 +2117,9 @@ SYSCALL_DEFINE3(bpf, int, cmd, union bpf_attr __user *, uattr, unsigned int, siz | |||
2103 | case BPF_RAW_TRACEPOINT_OPEN: | 2117 | case BPF_RAW_TRACEPOINT_OPEN: |
2104 | err = bpf_raw_tracepoint_open(&attr); | 2118 | err = bpf_raw_tracepoint_open(&attr); |
2105 | break; | 2119 | break; |
2120 | case BPF_BTF_LOAD: | ||
2121 | err = bpf_btf_load(&attr); | ||
2122 | break; | ||
2106 | default: | 2123 | default: |
2107 | err = -EINVAL; | 2124 | err = -EINVAL; |
2108 | break; | 2125 | break; |