lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.16 0173/1039] libbpf: Fix using invalidated memory in bpf_linker
    Date
    From: Andrii Nakryiko <andrii@kernel.org>

    [ Upstream commit 593835377f24ca1bb98008ec1dc3baefe491ad6e ]

    add_dst_sec() can invalidate bpf_linker's section index making
    dst_symtab pointer pointing into unallocated memory. Reinitialize
    dst_symtab pointer on each iteration to make sure it's always valid.

    Fixes: faf6ed321cf6 ("libbpf: Add BPF static linker APIs")
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20211124002325.1737739-7-andrii@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    tools/lib/bpf/linker.c | 5 ++++-
    1 file changed, 4 insertions(+), 1 deletion(-)

    diff --git a/tools/lib/bpf/linker.c b/tools/lib/bpf/linker.c
    index 94bdd97859285..6923a0ab3b127 100644
    --- a/tools/lib/bpf/linker.c
    +++ b/tools/lib/bpf/linker.c
    @@ -2000,7 +2000,7 @@ add_sym:
    static int linker_append_elf_relos(struct bpf_linker *linker, struct src_obj *obj)
    {
    struct src_sec *src_symtab = &obj->secs[obj->symtab_sec_idx];
    - struct dst_sec *dst_symtab = &linker->secs[linker->symtab_sec_idx];
    + struct dst_sec *dst_symtab;
    int i, err;

    for (i = 1; i < obj->sec_cnt; i++) {
    @@ -2033,6 +2033,9 @@ static int linker_append_elf_relos(struct bpf_linker *linker, struct src_obj *ob
    return -1;
    }

    + /* add_dst_sec() above could have invalidated linker->secs */
    + dst_symtab = &linker->secs[linker->symtab_sec_idx];
    +
    /* shdr->sh_link points to SYMTAB */
    dst_sec->shdr->sh_link = linker->symtab_sec_idx;

    --
    2.34.1


    \
     
     \ /
      Last update: 2022-01-24 23:10    [W:3.103 / U:0.596 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site