mirror of
https://github.com/raspberrypi/linux.git
synced 2026-01-04 18:27:36 +00:00
x86/ibt: Clean up is_endbr()
Pretty much every caller of is_endbr() actually wants to test something at an address and ends up doing get_kernel_nofault(). Fold the lot into a more convenient helper. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Sami Tolvanen <samitolvanen@google.com> Acked-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Andrii Nakryiko <andrii@kernel.org> Acked-by: "Masami Hiramatsu (Google)" <mhiramat@kernel.org> Link: https://lore.kernel.org/r/20250207122546.181367417@infradead.org
This commit is contained in:
@@ -36,21 +36,9 @@ static inline unsigned long ftrace_call_adjust(unsigned long addr)
|
||||
|
||||
static inline unsigned long arch_ftrace_get_symaddr(unsigned long fentry_ip)
|
||||
{
|
||||
#ifdef CONFIG_X86_KERNEL_IBT
|
||||
u32 instr;
|
||||
|
||||
/* We want to be extra safe in case entry ip is on the page edge,
|
||||
* but otherwise we need to avoid get_kernel_nofault()'s overhead.
|
||||
*/
|
||||
if ((fentry_ip & ~PAGE_MASK) < ENDBR_INSN_SIZE) {
|
||||
if (get_kernel_nofault(instr, (u32 *)(fentry_ip - ENDBR_INSN_SIZE)))
|
||||
return fentry_ip;
|
||||
} else {
|
||||
instr = *(u32 *)(fentry_ip - ENDBR_INSN_SIZE);
|
||||
}
|
||||
if (is_endbr(instr))
|
||||
if (is_endbr((void*)(fentry_ip - ENDBR_INSN_SIZE)))
|
||||
fentry_ip -= ENDBR_INSN_SIZE;
|
||||
#endif
|
||||
|
||||
return fentry_ip;
|
||||
}
|
||||
#define ftrace_get_symaddr(fentry_ip) arch_ftrace_get_symaddr(fentry_ip)
|
||||
|
||||
Reference in New Issue
Block a user