Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f89b7755 authored by Alexei Starovoitov's avatar Alexei Starovoitov Committed by David S. Miller
Browse files

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: default avatarAlexei Starovoitov <ast@plumgrid.com>
Acked-by: default avatarDaniel Borkmann <dborkman@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8ae3c911
Loading
Loading
Loading
Loading
+14 −0
Original line number Original line Diff line number Diff line
@@ -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
+1 −1
Original line number Original line Diff line number Diff line
@@ -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/


+3 −3
Original line number Original line Diff line number Diff line
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
+9 −0
Original line number Original line Diff line number Diff line
@@ -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;
}
+1 −1
Original line number Original line Diff line number Diff line
@@ -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