libbpf: Don't validate TYPE_ID relo's original imm value
authorAndrii Nakryiko <andrii@kernel.org>
Mon, 13 Dec 2021 01:07:06 +0000 (17:07 -0800)
committerAlexei Starovoitov <ast@kernel.org>
Mon, 13 Dec 2021 01:26:24 +0000 (17:26 -0800)
commit4b443bc1785f28df56fdbd6a107dc68ef7d5aa8e
tree2c6e46dbfaff8bce7a0c22d5f067aac442f70480
parentf12468828c28ff90d20c99b234a94223401f7924
libbpf: Don't validate TYPE_ID relo's original imm value

During linking, type IDs in the resulting linked BPF object file can
change, and so ldimm64 instructions corresponding to
BPF_CORE_TYPE_ID_TARGET and BPF_CORE_TYPE_ID_LOCAL CO-RE relos can get
their imm value out of sync with actual CO-RE relocation information
that's updated by BPF linker properly during linking process.

We could teach BPF linker to adjust such instructions, but it feels
a bit too much for linker to re-implement good chunk of
bpf_core_patch_insns logic just for this. This is a redundant safety
check for TYPE_ID relocations, as the real validation is in matching
CO-RE specs, so if that works fine, it's very unlikely that there is
something wrong with the instruction itself.

So, instead, teach libbpf (and kernel) to ignore insn->imm for
BPF_CORE_TYPE_ID_TARGET and BPF_CORE_TYPE_ID_LOCAL relos.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20211213010706.100231-1-andrii@kernel.org
tools/lib/bpf/relo_core.c