]> git.baikalelectronics.ru Git - kernel.git/commit
bpf: fix corruption on concurrent perf_event_output calls
authorDaniel Borkmann <daniel@iogearbox.net>
Tue, 12 Dec 2017 01:25:30 +0000 (02:25 +0100)
committerAlexei Starovoitov <ast@kernel.org>
Tue, 12 Dec 2017 17:51:12 +0000 (09:51 -0800)
commitb79889f20ec4a8b5e827cafeac11d62be87aa728
treee702c33467d5fc7b2c3b807addc3269774b9f40c
parentf6db2823180e61efa1cba861349f0d58fbf19b75
bpf: fix corruption on concurrent perf_event_output calls

When tracing and networking programs are both attached in the
system and both use event-output helpers that eventually call
into perf_event_output(), then we could end up in a situation
where the tracing attached program runs in user context while
a cls_bpf program is triggered on that same CPU out of softirq
context.

Since both rely on the same per-cpu perf_sample_data, we could
potentially corrupt it. This can only ever happen in a combination
of the two types; all tracing programs use a bpf_prog_active
counter to bail out in case a program is already running on
that CPU out of a different context. XDP and cls_bpf programs
by themselves don't have this issue as they run in the same
context only. Therefore, split both perf_sample_data so they
cannot be accessed from each other.

Fixes: 7e622c548896 ("bpf: avoid excessive stack usage for perf_sample_data")
Reported-by: Alexei Starovoitov <ast@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Tested-by: Song Liu <songliubraving@fb.com>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
kernel/trace/bpf_trace.c