Skip to content
  • Daniel Borkmann's avatar
    bpf: Restrict bpf_probe_read{, str}() only to archs where they work · 0ebeea8c
    Daniel Borkmann authored
    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 6ae08ae3
    
     ("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: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Reviewed-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
    Acked-by: default avatarLinus 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
    0ebeea8c