mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 06:31:49 +00:00
objtool: Do frame pointer check before dead end check
Even calls to __noreturn functions need the frame pointer setup first. Such functions often dump the stack. Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Tested-by: Nick Desaulniers <ndesaulniers@google.com> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lkml.kernel.org/r/aed62fbd60e239280218be623f751a433658e896.1563413318.git.jpoimboe@redhat.com
This commit is contained in:
parent
8e25c9f8b4
commit
c9bab22bc4
@ -133,6 +133,9 @@ static bool __dead_end_function(struct objtool_file *file, struct symbol *func,
|
||||
"rewind_stack_do_exit",
|
||||
};
|
||||
|
||||
if (!func)
|
||||
return false;
|
||||
|
||||
if (func->bind == STB_WEAK)
|
||||
return false;
|
||||
|
||||
@ -2071,19 +2074,16 @@ static int validate_branch(struct objtool_file *file, struct symbol *func,
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (insn->type == INSN_CALL) {
|
||||
if (is_fentry_call(insn))
|
||||
break;
|
||||
|
||||
if (dead_end_function(file, insn->call_dest))
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!no_fp && func && !has_valid_stack_frame(&state)) {
|
||||
if (!no_fp && func && !is_fentry_call(insn) &&
|
||||
!has_valid_stack_frame(&state)) {
|
||||
WARN_FUNC("call without frame pointer save/setup",
|
||||
sec, insn->offset);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (dead_end_function(file, insn->call_dest))
|
||||
return 0;
|
||||
|
||||
break;
|
||||
|
||||
case INSN_JUMP_CONDITIONAL:
|
||||
|
Loading…
Reference in New Issue
Block a user