lkml.org 
[lkml]   [2021]   [Jan]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 05/21] objtool: Support retpoline jump detection for vmlinux.o
    Date
    Objtool converts direct retpoline jumps to type INSN_JUMP_DYNAMIC, since
    that's what they are semantically.

    That conversion doesn't work in vmlinux.o validation because the
    indirect thunk function is present in the object, so the intra-object
    jump check succeeds before the retpoline jump check gets a chance.

    Rearrange the checks: check for a retpoline jump before checking for an
    intra-object jump.

    Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
    ---
    tools/objtool/check.c | 8 ++++----
    1 file changed, 4 insertions(+), 4 deletions(-)

    diff --git a/tools/objtool/check.c b/tools/objtool/check.c
    index 12d48db41626..b1327789d049 100644
    --- a/tools/objtool/check.c
    +++ b/tools/objtool/check.c
    @@ -785,10 +785,6 @@ static int add_jump_destinations(struct objtool_file *file)
    } else if (reloc->sym->type == STT_SECTION) {
    dest_sec = reloc->sym->sec;
    dest_off = arch_dest_reloc_offset(reloc->addend);
    - } else if (reloc->sym->sec->idx) {
    - dest_sec = reloc->sym->sec;
    - dest_off = reloc->sym->sym.st_value +
    - arch_dest_reloc_offset(reloc->addend);
    } else if (!strncmp(reloc->sym->name, "__x86_indirect_thunk_", 21) ||
    !strncmp(reloc->sym->name, "__x86_retpoline_", 16)) {
    /*
    @@ -802,6 +798,10 @@ static int add_jump_destinations(struct objtool_file *file)

    insn->retpoline_safe = true;
    continue;
    + } else if (reloc->sym->sec->idx) {
    + dest_sec = reloc->sym->sec;
    + dest_off = reloc->sym->sym.st_value +
    + arch_dest_reloc_offset(reloc->addend);
    } else {
    /* external sibling call */
    insn->call_dest = reloc->sym;
    --
    2.29.2
    \
     
     \ /
      Last update: 2021-01-14 20:43    [W:4.077 / U:0.128 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site