libbpf: Tighten BTF type ID rewriting with error checking
authorAndrii Nakryiko <andrii@kernel.org>
Fri, 23 Apr 2021 18:13:40 +0000 (11:13 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 23 Apr 2021 21:05:27 +0000 (14:05 -0700)
It should never fail, but if it does, it's better to know about this rather
than end up with nonsensical type IDs.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Yonghong Song <yhs@fb.com>
Link: https://lore.kernel.org/bpf/20210423181348.1801389-11-andrii@kernel.org
tools/lib/bpf/linker.c

index b0e0384..5505c85 100644 (file)
@@ -1429,6 +1429,13 @@ static int linker_fixup_btf(struct src_obj *obj)
 static int remap_type_id(__u32 *type_id, void *ctx)
 {
        int *id_map = ctx;
+       int new_id = id_map[*type_id];
+
+       /* Error out if the type wasn't remapped. Ignore VOID which stays VOID. */
+       if (new_id == 0 && *type_id != 0) {
+               pr_warn("failed to find new ID mapping for original BTF type ID %u\n", *type_id);
+               return -EINVAL;
+       }
 
        *type_id = id_map[*type_id];