]> git.baikalelectronics.ru Git - kernel.git/commit
bpf: Restrict bpf_probe_read{, str}() only to archs where they work
authorDaniel Borkmann <daniel@iogearbox.net>
Fri, 15 May 2020 10:11:16 +0000 (12:11 +0200)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 15 May 2020 15:10:36 +0000 (08:10 -0700)
commitd3ddf3622fc7b11b257df5c9534fbb785ccd4c98
tree6d869e1310be667ec0900ccede6290c912b61071
parentbdb48bceb729158ba7456b2a41ebb03ded38f08f
bpf: Restrict bpf_probe_read{, str}() only to archs where they work

Given the legacy bpf_probe_read{,str}() BPF helpers are broken on archs
with overlapping address ranges, we should really take the next step to
disable them from BPF use there.

To generally fix the situation, we've recently added new helper variants
bpf_probe_read_{user,kernel}() and bpf_probe_read_{user,kernel}_str().
For details on them, see 43bfd5db4eb5 ("bpf: Add probe_read_{user, kernel}
and probe_read_{user,kernel}_str helpers").

Given bpf_probe_read{,str}() have been around for ~5 years by now, there
are plenty of users at least on x86 still relying on them today, so we
cannot remove them entirely w/o breaking the BPF tracing ecosystem.

However, their use should be restricted to archs with non-overlapping
address ranges where they are working in their current form. Therefore,
move this behind a CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE and
have x86, arm64, arm select it (other archs supporting it can follow-up
on it as well).

For the remaining archs, they can workaround easily by relying on the
feature probe from bpftool which spills out defines that can be used out
of BPF C code to implement the drop-in replacement for old/new kernels
via: bpftool feature probe macro

Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Reviewed-by: Masami Hiramatsu <mhiramat@kernel.org>
Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
Cc: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/bpf/20200515101118.6508-2-daniel@iogearbox.net
arch/arm/Kconfig
arch/arm64/Kconfig
arch/x86/Kconfig
init/Kconfig
kernel/trace/bpf_trace.c