bpf: make tracing helpers gpl only
Subsystems (6)
PATCH 1/1 bpf: make tracing helpers gpl only
exported perf symbols are GPL only, mark eBPF helper functions used in tracing as GPL only as well.
---
this is on top of this patch that touches the same file:
http://patchwork.ozlabs.org/patch/534664/
kernel/trace/bpf_trace.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
kernel/trace/bpf_trace.c +2 -2
@@ -214,7 +214,7 @@ static u64 bpf_perf_event_read(u64 r1, u64 index, u64 r3, u64 r4, u64 r5)static const struct bpf_func_proto bpf_perf_event_read_proto = { .func = bpf_perf_event_read, - .gpl_only = false, + .gpl_only = true, .ret_type =RET_INTEGER , .arg1_type =ARG_CONST_MAP_PTR , .arg2_type =ARG_ANYTHING ,
@@ -255,7 +255,7 @@ static u64 bpf_perf_event_output(u64 r1, u64 r2, u64 index, u64 r4, u64 size)static const struct bpf_func_proto bpf_perf_event_output_proto = { .func = bpf_perf_event_output, - .gpl_only = false, + .gpl_only = true, .ret_type =RET_INTEGER , .arg1_type =ARG_PTR_TO_CTX , .arg2_type =ARG_CONST_MAP_PTR ,
Signature · 1 line
1.7.9.5
Quoted 26 lines · Alexei Starovoitov
exported perf symbols are GPL only, mark eBPF helper functions used in tracing as GPL only as well.
Suggested-by Peter Zijlstra <[email protected]>Signed-off-by Alexei Starovoitov <[email protected]>---
this is on top of this patch that touches the same file:
http://patchwork.ozlabs.org/patch/534664/kernel/trace/bpf_trace.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)kernel/trace/bpf_trace.c +1
-1@@ -214,7 +214,7 @@ static u64 bpf_perf_event_read(u64 r1, u64 index, u64 r3, u64 r4, u64 r5)static const struct bpf_func_proto bpf_perf_event_read_proto = { .func = bpf_perf_event_read, - .gpl_only = false, + .gpl_only = true, .ret_type =RET_INTEGER , .arg1_type =ARG_CONST_MAP_PTR , .arg2_type =ARG_ANYTHING ,
kernel/trace/bpf_trace.c static u64 bpf_perf_event_output(u64 r1, u64 r2, u64 index, u64 r4, u64 size) · line 261
Quoted 8 lines
kernel/trace/bpf_trace.c +1
-1@@ -255,7 +255,7 @@ static u64 bpf_perf_event_output(u64 r1, u64 r2, u64 index, u64 r4, u64 size)static const struct bpf_func_proto bpf_perf_event_output_proto = { .func = bpf_perf_event_output, - .gpl_only = false, + .gpl_only = true, .ret_type =RET_INTEGER , .arg1_type =ARG_PTR_TO_CTX , .arg2_type =ARG_CONST_MAP_PTR ,
So there's a lot more 'gpl_only = false' cases that I can see:
triton:~/tip> git grep gpl_only | grep falsekernel/bpf/core.c: .gpl_only = false,kernel/bpf/helpers.c: .gpl_only = false,kernel/bpf/helpers.c: .gpl_only = false,kernel/bpf/helpers.c: .gpl_only = false,kernel/bpf/helpers.c: .gpl_only = false,kernel/bpf/helpers.c: .gpl_only = false,kernel/bpf/helpers.c: .gpl_only = false,kernel/bpf/helpers.c: .gpl_only = false,kernel/bpf/helpers.c: .gpl_only = false,kernel/trace/bpf_trace.c: .gpl_only = false,net/core/filter.c: .gpl_only = false,net/core/filter.c: .gpl_only = false,net/core/filter.c: .gpl_only = false,net/core/filter.c: .gpl_only = false,net/core/filter.c: .gpl_only = false,net/core/filter.c: .gpl_only = false,net/core/filter.c: .gpl_only = false,net/core/filter.c: .gpl_only = false,net/core/filter.c: .gpl_only = false,
and only a handful of 'true' cases:
triton:~/tip> git grep gpl_only | grep true
kernel/bpf/helpers.c: .gpl_only = true, kernel/trace/bpf_trace.c: .gpl_only = true, kernel/trace/bpf_trace.c: .gpl_only = true,
so I don't know the netfilter ones, but in particular the tracing ones I'm sure should be gpl-only. Do we really, really want proprietary modules mucking with such internals??
Thanks,
Ingo
Quoted 3 lines · Ingo Molnar
so I don't know the netfilter ones, but in particular the tracing ones I'm sure should be gpl-only. Do we really, really want proprietary modules mucking with such internals??
of course, not. Therefore bpf_probe_read() was gpl_only from very beginning. Same goes to bpf_trace_printk() and bpf_ktime_get_ns(). and after this patch the only remaining non-gpl tracing helpers will be bpf_get_current_pid_tgid()/uid_gid()/comm()
and imo it's fine.
On the networking side the helpers are non-gpl, since all of them are generic. They don't mess with kernel, but examine/modify the packet. Just like cBPF can read the packet data, get_processor_id, get_random, eBPF can do the same plus write into the packet, compute checksum, redirect, push/pop vlan.
When we introduce eBPF for seccomp, I would argue that helpers on that side should be non-gpl as well, otherwise people will try to add features to cBPF instead of moving to eBPF.
From: Alexei Starovoitov <[email protected]>
Date: Fri, 23 Oct 2015 14:58:19 -0700
Quoted 5 lines
exported perf symbols are GPL only, mark eBPF helper functions used in tracing as GPL only as well.
Suggested-by Peter Zijlstra <[email protected]>Signed-off-by Alexei Starovoitov <[email protected]>
Applied.