bpf: remove tracepoints from bpf core
Subsystems (5)
Alexei Starovoitov
maintainerPATCH 1/1 bpf: remove tracepoints from bpf core
tracepoints to bpf core were added as a way to provide introspection to bpf programs and maps, but after some time it became clear that this approach is inadequate, so prog_id, map_id and corresponding get_next_id, get_fd_by_id, get_info_by_fd, prog_query APIs were introduced and fully adopted by bpftool and other applications. The tracepoints in bpf core started to rot and causing syzbot warnings:
WARNING: CPU: 0 PID: 3008 at kernel/trace/trace_event_perf.c:274 Kernel panic - not syncing: panic_on_warn set ... perf_trace_bpf_map_keyval+0x260/0xbd0 include/trace/events/bpf.h:228 trace_bpf_map_update_elem include/trace/events/bpf.h:274 [inline] map_update_elem kernel/bpf/syscall.c:597 [inline] SYSC_bpf kernel/bpf/syscall.c:1478 [inline]
Hence this patch deletes tracepoints in bpf core.
--- MAINTAINERS | 1 - include/linux/bpf_trace.h | 1 - include/trace/events/bpf.h | 355 --------------------------------------------- kernel/bpf/core.c | 6 - kernel/bpf/inode.c | 16 +- kernel/bpf/syscall.c | 11 -- 6 files changed, 1 insertion(+), 389 deletions(-) delete mode 100644 include/trace/events/bpf.h
MAINTAINERS +0 -1
@@ -2727,7 +2727,6 @@ F: Documentation/networking/filter.txt F: Documentation/bpf/ F: include/linux/bpf* F: include/linux/filter.h -F: include/trace/events/bpf.h F: include/trace/events/xdp.h F: include/uapi/linux/bpf* F: include/uapi/linux/filter.h
include/linux/bpf_trace.h +0 -1
@@ -2,7 +2,6 @@#ifndef __LINUX_BPF_TRACE_H__#define __LINUX_BPF_TRACE_H__ -#include <trace/events/bpf.h> #include <trace/events/xdp.h> #endif /* __LINUX_BPF_TRACE_H__ */
include/trace/events/bpf.h deleted +0 -355
355 lines not on this page · raw message
kernel/bpf/core.c +0 -6
@@ -1840,9 +1840,3 @@ int __weak skb_copy_bits(const struct sk_buff *skb, int offset, void *to,#include <linux/bpf_trace.h> EXPORT_TRACEPOINT_SYMBOL_GPL (xdp_exception); - -/* These are only used within the BPF_SYSCALL code */ -#ifdef CONFIG_BPF_SYSCALL -EXPORT_TRACEPOINT_SYMBOL_GPL (bpf_prog_get_type); -EXPORT_TRACEPOINT_SYMBOL_GPL (bpf_prog_put_rcu); -#endif
kernel/bpf/inode.c +1 -15
@@ -429,13 +429,6 @@ int bpf_obj_pin_user(u32 ufd, const char __user *pathname) ret =bpf_obj_do_pin (pname, raw, type);if (ret !=0 )bpf_any_put (raw, type); -if ((trace_bpf_obj_pin_prog_enabled () || -trace_bpf_obj_pin_map_enabled ()) && !ret) { -if (type ==BPF_TYPE_PROG ) -trace_bpf_obj_pin_prog (raw, ufd, pname); -if (type ==BPF_TYPE_MAP ) -trace_bpf_obj_pin_map (raw, ufd, pname); - } out:putname (pname);return ret;
@@ -502,15 +495,8 @@ int bpf_obj_get_user(const char __user *pathname, int flags)else goto out; -if (ret <0 ) { +if (ret <0 )bpf_any_put (raw, type); - }else if (trace_bpf_obj_get_prog_enabled () || -trace_bpf_obj_get_map_enabled ()) { -if (type ==BPF_TYPE_PROG ) -trace_bpf_obj_get_prog (raw, ret, pname); -if (type ==BPF_TYPE_MAP ) -trace_bpf_obj_get_map (raw, ret, pname); - } out:putname (pname);return ret;
kernel/bpf/syscall.c +0 -11
@@ -503,7 +503,6 @@ static int map_create(union bpf_attr *attr)return err; } -trace_bpf_map_create (map, err);return err; free_map:
@@ -663,7 +662,6 @@ static int map_lookup_elem(union bpf_attr *attr)if (copy_to_user (uvalue, value, value_size) !=0 ) goto free_value; -trace_bpf_map_lookup_elem (map, ufd, key, value); err =0 ; free_value:
@@ -760,8 +758,6 @@ static int map_update_elem(union bpf_attr *attr)__this_cpu_dec (bpf_prog_active);preempt_enable (); out: -if (!err) -trace_bpf_map_update_elem (map, ufd, key, value); free_value:kfree (value); free_key:
@@ -814,8 +810,6 @@ static int map_delete_elem(union bpf_attr *attr)__this_cpu_dec (bpf_prog_active);preempt_enable (); out: -if (!err) -trace_bpf_map_delete_elem (map, ufd, key);kfree (key); err_put:fdput (f);
@@ -879,7 +873,6 @@ static int map_get_next_key(union bpf_attr *attr)if (copy_to_user (unext_key, next_key, map->key_size) !=0 ) goto free_next_key; -trace_bpf_map_next_key (map, ufd, key, next_key); err =0 ; free_next_key:
@@ -1027,7 +1020,6 @@ static void __bpf_prog_put(struct bpf_prog *prog, bool do_idr_lock)if (atomic_dec_and_test (&prog->aux->refcnt)) {int i; -trace_bpf_prog_put_rcu (prog);/* bpf_prog_free_id() must be called first */ bpf_prog_free_id (prog, do_idr_lock);
@@ -1196,8 +1188,6 @@ struct bpf_prog *bpf_prog_get_type_dev(u32 ufd, enum bpf_prog_type type, {struct bpf_prog *prog =__bpf_prog_get (ufd, &type, attach_drv); -if (!IS_ERR (prog)) -trace_bpf_prog_get_type (prog);return prog; }EXPORT_SYMBOL_GPL (bpf_prog_get_type_dev);
@@ -1373,7 +1363,6 @@ static int bpf_prog_load(union bpf_attr *attr) }bpf_prog_kallsyms_add (prog); -trace_bpf_prog_load (prog, err);return err; free_used_maps:
Signature · 1 line
2.9.5
From: Alexei Starovoitov <[email protected]>
Date: Sat, 28 Apr 2018 19:56:37 -0700
Quoted 12 lines
tracepoints to bpf core were added as a way to provide introspection to bpf programs and maps, but after some time it became clear that this approach is inadequate, so
prog_id,map_idand correspondingget_next_id,get_fd_by_id,get_info_by_fd,prog_queryAPIs were introduced and fully adopted by bpftool and other applications. The tracepoints in bpf core started to rot and causing syzbot warnings:WARNING: CPU: 0 PID: 3008 at kernel/trace/trace_event_perf.c:274 Kernel panic - not syncing: panic_on_warn set ... perf_trace_bpf_map_keyval+0x260/0xbd0 include/trace/events/bpf.h:228 trace_bpf_map_update_elem include/trace/events/bpf.h:274 [inline] map_update_elem kernel/bpf/syscall.c:597 [inline] SYSC_bpf kernel/bpf/syscall.c:1478 [inline]
Quoted 5 lines
Hence this patch deletes tracepoints in bpf core.
Reported-by Eric Biggers <[email protected]>Signed-off-by Alexei Starovoitov <[email protected]>
Daniel Borkmann
maintainerQuoted 17 lines · David Miller
From: Alexei Starovoitov <[email protected]>
Date: Sat, 28 Apr 2018 19:56:37 -0700Quoted 14 lines
tracepoints to bpf core were added as a way to provide introspection to bpf programs and maps, but after some time it became clear that this approach is inadequate, so
prog_id,map_idand correspondingget_next_id,get_fd_by_id,get_info_by_fd,prog_queryAPIs were introduced and fully adopted by bpftool and other applications. The tracepoints in bpf core started to rot and causing syzbot warnings:WARNING: CPU: 0 PID: 3008 at kernel/trace/trace_event_perf.c:274 Kernel panic - not syncing: panic_on_warn set ... perf_trace_bpf_map_keyval+0x260/0xbd0 include/trace/events/bpf.h:228 trace_bpf_map_update_elem include/trace/events/bpf.h:274 [inline] map_update_elem kernel/bpf/syscall.c:597 [inline] SYSC_bpf kernel/bpf/syscall.c:1478 [inline]Hence this patch deletes tracepoints in bpf core.
Quoted 5 lines
Quoted 3 lines
Reported-by Eric Biggers <[email protected]>Signed-off-by Alexei Starovoitov <[email protected]>Acked-by David S. Miller <[email protected]>
Fully agree, applied to bpf-next, thanks!