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)
committerHaibo Chen <haibo.chen@nxp.com>
Thu, 12 Apr 2018 10:46:09 +0000 (18:46 +0800)
commit51de580e8e70ad1bf23a68384a6a3be5bda719f5
tree52871e0b75e7cb6dc5c35328a7c445e466252086
parent9fd20903c5dedafe0cb6206f13beedef7245fa84
arm64: use RET instruction for exiting the trampoline

commit be04a6d1126b upstream.

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: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Alex Shi <alex.shi@linaro.org>
arch/arm64/kernel/entry.S