mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-04 04:06:26 +00:00
x86/ftrace: Rebalance RSB
ftrace_regs_caller() uses a PUSH;RET pattern to tail-call into a direct-call function, this unbalances the RSB, fix that. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lore.kernel.org/r/20220915111148.823216933@infradead.org
This commit is contained in:
parent
eac828eaef
commit
36b64f1012
@ -271,6 +271,17 @@ SYM_INNER_LABEL(ftrace_regs_caller_end, SYM_L_GLOBAL)
|
||||
/* Restore flags */
|
||||
popfq
|
||||
UNWIND_HINT_FUNC
|
||||
|
||||
/*
|
||||
* The above left an extra return value on the stack; effectively
|
||||
* doing a tail-call without using a register. This PUSH;RET
|
||||
* pattern unbalances the RSB, inject a pointless CALL to rebalance.
|
||||
*/
|
||||
ANNOTATE_INTRA_FUNCTION_CALL
|
||||
CALL .Ldo_rebalance
|
||||
int3
|
||||
.Ldo_rebalance:
|
||||
add $8, %rsp
|
||||
RET
|
||||
|
||||
SYM_FUNC_END(ftrace_regs_caller)
|
||||
|
Loading…
Reference in New Issue
Block a user