diff options
| author | Alexei Starovoitov <ast@plumgrid.com> | 2014-10-23 21:41:08 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2014-10-27 19:09:59 -0400 |
| commit | f89b7755f517cdbb755d7543eef986ee9d54e654 (patch) | |
| tree | bf491bea6418b0442900d864237e0028f7c35162 /kernel/bpf | |
| parent | 8ae3c911b9efcca653c552a9c74957a6cb04a87d (diff) | |
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>
Diffstat (limited to 'kernel/bpf')
| -rw-r--r-- | kernel/bpf/Makefile | 6 | ||||
| -rw-r--r-- | kernel/bpf/core.c | 9 |
2 files changed, 12 insertions, 3 deletions
diff --git a/kernel/bpf/Makefile b/kernel/bpf/Makefile index 45427239f375..0daf7f6ae7df 100644 --- a/kernel/bpf/Makefile +++ b/kernel/bpf/Makefile | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | obj-y := core.o syscall.o verifier.o | 1 | obj-y := core.o |
| 2 | 2 | obj-$(CONFIG_BPF_SYSCALL) += syscall.o verifier.o | |
| 3 | ifdef CONFIG_TEST_BPF | 3 | ifdef CONFIG_TEST_BPF |
| 4 | obj-y += test_stub.o | 4 | obj-$(CONFIG_BPF_SYSCALL) += test_stub.o |
| 5 | endif | 5 | endif |
diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c index f0c30c59b317..d6594e457a25 100644 --- a/kernel/bpf/core.c +++ b/kernel/bpf/core.c | |||
| @@ -655,3 +655,12 @@ void bpf_prog_free(struct bpf_prog *fp) | |||
| 655 | schedule_work(&aux->work); | 655 | schedule_work(&aux->work); |
| 656 | } | 656 | } |
| 657 | EXPORT_SYMBOL_GPL(bpf_prog_free); | 657 | EXPORT_SYMBOL_GPL(bpf_prog_free); |
| 658 | |||
| 659 | /* To execute LD_ABS/LD_IND instructions __bpf_prog_run() may call | ||
| 660 | * skb_copy_bits(), so provide a weak definition of it for NET-less config. | ||
| 661 | */ | ||
| 662 | int __weak skb_copy_bits(const struct sk_buff *skb, int offset, void *to, | ||
| 663 | int len) | ||
| 664 | { | ||
| 665 | return -EFAULT; | ||
| 666 | } | ||
