From 2105a92748e83e2e3ee6be539da959706bbb3898 Mon Sep 17 00:00:00 2001 From: Peter Zijlstra Date: Sat, 30 Oct 2021 09:47:58 +0200 Subject: static_call,x86: Robustify trampoline patching Add a few signature bytes after the static call trampoline and verify those bytes match before patching the trampoline. This avoids patching random other JMPs (such as CFI jump-table entries) instead. These bytes decode as: d: 53 push %rbx e: 43 54 rex.XB push %r12 And happen to spell "SCT". Signed-off-by: Peter Zijlstra (Intel) Link: https://lkml.kernel.org/r/20211030074758.GT174703@worktop.programming.kicks-ass.net --- tools/objtool/check.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'tools/objtool') diff --git a/tools/objtool/check.c b/tools/objtool/check.c index add39902166d..21735829b860 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -3310,6 +3310,9 @@ static bool ignore_unreachable_insn(struct objtool_file *file, struct instructio if (!insn->func) return false; + if (insn->func->static_call_tramp) + return true; + /* * CONFIG_UBSAN_TRAP inserts a UD2 when it sees * __builtin_unreachable(). The BUG() macro has an unreachable() after -- cgit v1.2.3