• Andrii Nakryiko's avatar
    libbpf: Improve handling of failed CO-RE relocations · d7a25270
    Andrii Nakryiko authored
    Previously, if libbpf failed to resolve CO-RE relocation for some
    instructions, it would either return error immediately, or, if
    .relaxed_core_relocs option was set, would replace relocatable offset/imm part
    of an instruction with a bogus value (-1). Neither approach is good, because
    there are many possible scenarios where relocation is expected to fail (e.g.,
    when some field knowingly can be missing on specific kernel versions). On the
    other hand, replacing offset with invalid one can hide programmer errors, if
    this relocation failue wasn't anticipated.
    
    This patch deprecates .relaxed_core_relocs option and changes the approach to
    always replacing instruction, for which relocation failed, with invalid BPF
    helper call instruction. For cases where this is expected, BPF program should
    already ensure that that instruction is unreachable, in which case this
    invalid instruction is going to be silently ignored. But if instruction wasn't
    guarded, BPF program will be rejected at verification step with verifier log
    pointing precisely to the place in assembly where the problem is.
    Signed-off-by: default avatarAndrii Nakryiko <andriin@fb.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Acked-by: default avatarMartin KaFai Lau <kafai@fb.com>
    Link: https://lore.kernel.org/bpf/20200124053837.2434679-1-andriin@fb.com
    d7a25270
libbpf.h 23 KB