From: Daniel Borkmann Date: Thu, 21 Jan 2016 23:46:28 +0000 (+0100) Subject: tc, bpf: make sure relo is in relation with map section X-Git-Tag: v4.5.0~90 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2486337aace9df195eb3d01fb08b665958ce311d;p=thirdparty%2Fiproute2.git tc, bpf: make sure relo is in relation with map section Add a test that symbol from relocation entry is actually related to map section and bail out with an error message if it's not the case; in relation to [1]. [1] https://llvm.org/bugs/show_bug.cgi?id=26243 Signed-off-by: Daniel Borkmann Acked-by: Alexei Starovoitov --- diff --git a/tc/tc_bpf.c b/tc/tc_bpf.c index 42c884186..955bd5fbf 100644 --- a/tc/tc_bpf.c +++ b/tc/tc_bpf.c @@ -1328,6 +1328,12 @@ static int bpf_apply_relo_data(struct bpf_elf_ctx *ctx, if (gelf_getsym(ctx->sym_tab, GELF_R_SYM(relo.r_info), &sym) != &sym) return -EIO; + if (sym.st_shndx != ctx->sec_maps) { + fprintf(stderr, "ELF contains non-map related relo data in " + "entry %u pointing to section %u! Compiler bug?!\n", + relo_ent, sym.st_shndx); + return -EIO; + } rmap = sym.st_value / sizeof(struct bpf_elf_map); if (rmap >= ARRAY_SIZE(ctx->map_fds))