arm64: use RET instruction for exiting the trampoline
authorWill Deacon <will.deacon@arm.com>
Tue, 14 Nov 2017 16:15:59 +0000 (16:15 +0000)
committerGreg Kroah-Hartman <gregkh@google.com>
Sat, 6 Jan 2018 11:42:36 +0000 (12:42 +0100)
commitc65273a83da79d474affb7f6d431ac53beac0761
tree1e3bbec9069365cc1f1948fe3d9bfbabf4f73c2e
parent8a345128f74e2313b14689da63dcaa3483703801
arm64: use RET instruction for exiting the trampoline

Speculation attacks against the entry trampoline can potentially resteer
the speculative instruction stream through the indirect branch and into
arbitrary gadgets within the kernel.

This patch defends against these attacks by forcing a misprediction
through the return stack: a dummy BL instruction loads an entry into
the stack, so that the predicted program flow of the subsequent RET
instruction is to a branch-to-self instruction which is finally resolved
as a branch to the kernel vectors with speculation suppressed.

Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
arch/arm64/kernel/entry.S