forked from Minki/linux
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: Alexei Starovoitov <ast@plumgrid.com> Acked-by: Daniel Borkmann <dborkman@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
8ae3c911b9
commit
f89b7755f5
14
init/Kconfig
14
init/Kconfig
|
@ -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
|
||||||
|
|
||||||
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/
|
||||||
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/
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
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)
|
||||||
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
|
||||||
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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user