Message ID | 20201203035204.1411380-2-andrii@kernel.org |
---|---|
State | Not Applicable |
Headers | show |
Series | Support BTF-powered BPF tracing programs for kernel modules | expand |
Andrii Nakryiko wrote: > __module_address() needs to be called with preemption disabled or with > module_mutex taken. preempt_disable() is enough for read-only uses, which is > what this fix does. Also, module_put() does internal check for NULL, so drop > it as well. > > Fixes: a38d1107f937 ("bpf: support raw tracepoints in modules") > Acked-by: Martin KaFai Lau <kafai@fb.com> > Signed-off-by: Andrii Nakryiko <andrii@kernel.org> > --- Acked-by: John Fastabend <john.fastabend@gmail.com>
diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c index d255bc9b2bfa..23a390aac524 100644 --- a/kernel/trace/bpf_trace.c +++ b/kernel/trace/bpf_trace.c @@ -2060,10 +2060,12 @@ struct bpf_raw_event_map *bpf_get_raw_tracepoint(const char *name) void bpf_put_raw_tracepoint(struct bpf_raw_event_map *btp) { - struct module *mod = __module_address((unsigned long)btp); + struct module *mod; - if (mod) - module_put(mod); + preempt_disable(); + mod = __module_address((unsigned long)btp); + module_put(mod); + preempt_enable(); } static __always_inline