提交 f89b7755 编写于 作者: A Alexei Starovoitov 提交者: David S. Miller

bpf: split eBPF out of NET

introduce two configs:
- hidden CONFIG_BPF to select eBPF interpreter that classic socket filters
  depend on
- visible CONFIG_BPF_SYSCALL (default off) that tracing and sockets can use

that solves several problems:
- tracing and others that wish to use eBPF don't need to depend on NET.
  They can use BPF_SYSCALL to allow loading from userspace or select BPF
  to use it directly from kernel in NET-less configs.
- in 3.18 programs cannot be attached to events yet, so don't force it on
- when the rest of eBPF infra is there in 3.19+, it's still useful to
  switch it off to minimize kernel size

bloat-o-meter on x64 shows:
add/remove: 0/60 grow/shrink: 0/2 up/down: 0/-15601 (-15601)

tested with many different config combinations. Hopefully didn't miss anything.
Signed-off-by: NAlexei Starovoitov <ast@plumgrid.com>
Acked-by: NDaniel Borkmann <dborkman@redhat.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 8ae3c911
...@@ -1341,6 +1341,10 @@ config SYSCTL_ARCH_UNALIGN_ALLOW ...@@ -1341,6 +1341,10 @@ config SYSCTL_ARCH_UNALIGN_ALLOW
config HAVE_PCSPKR_PLATFORM config HAVE_PCSPKR_PLATFORM
bool bool
# interpreter that classic socket filters depend on
config BPF
bool
menuconfig EXPERT menuconfig EXPERT
bool "Configure standard kernel features (expert users)" bool "Configure standard kernel features (expert users)"
# Unhide debug options, to make the on-by-default options visible # Unhide debug options, to make the on-by-default options visible
...@@ -1521,6 +1525,16 @@ config EVENTFD ...@@ -1521,6 +1525,16 @@ config EVENTFD
If unsure, say Y. If unsure, say Y.
# syscall, maps, verifier
config BPF_SYSCALL
bool "Enable bpf() system call" if EXPERT
select ANON_INODES
select BPF
default n
help
Enable the bpf() system call that allows to manipulate eBPF
programs and maps via file descriptors.
config SHMEM config SHMEM
bool "Use full shmem filesystem" if EXPERT bool "Use full shmem filesystem" if EXPERT
default y default y
......
...@@ -86,7 +86,7 @@ obj-$(CONFIG_RING_BUFFER) += trace/ ...@@ -86,7 +86,7 @@ obj-$(CONFIG_RING_BUFFER) += trace/
obj-$(CONFIG_TRACEPOINTS) += trace/ obj-$(CONFIG_TRACEPOINTS) += trace/
obj-$(CONFIG_IRQ_WORK) += irq_work.o obj-$(CONFIG_IRQ_WORK) += irq_work.o
obj-$(CONFIG_CPU_PM) += cpu_pm.o obj-$(CONFIG_CPU_PM) += cpu_pm.o
obj-$(CONFIG_NET) += bpf/ obj-$(CONFIG_BPF) += bpf/
obj-$(CONFIG_PERF_EVENTS) += events/ obj-$(CONFIG_PERF_EVENTS) += events/
......
obj-y := core.o syscall.o verifier.o obj-y := core.o
obj-$(CONFIG_BPF_SYSCALL) += syscall.o verifier.o
ifdef CONFIG_TEST_BPF ifdef CONFIG_TEST_BPF
obj-y += test_stub.o obj-$(CONFIG_BPF_SYSCALL) += test_stub.o
endif endif
...@@ -655,3 +655,12 @@ void bpf_prog_free(struct bpf_prog *fp) ...@@ -655,3 +655,12 @@ void bpf_prog_free(struct bpf_prog *fp)
schedule_work(&aux->work); schedule_work(&aux->work);
} }
EXPORT_SYMBOL_GPL(bpf_prog_free); EXPORT_SYMBOL_GPL(bpf_prog_free);
/* To execute LD_ABS/LD_IND instructions __bpf_prog_run() may call
* skb_copy_bits(), so provide a weak definition of it for NET-less config.
*/
int __weak skb_copy_bits(const struct sk_buff *skb, int offset, void *to,
int len)
{
return -EFAULT;
}
...@@ -6,7 +6,7 @@ menuconfig NET ...@@ -6,7 +6,7 @@ menuconfig NET
bool "Networking support" bool "Networking support"
select NLATTR select NLATTR
select GENERIC_NET_UTILS select GENERIC_NET_UTILS
select ANON_INODES select BPF
---help--- ---help---
Unless you really know what you are doing, you should say Y here. Unless you really know what you are doing, you should say Y here.
The reason is that some programs need kernel networking support even The reason is that some programs need kernel networking support even
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册