mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
BACKPORT: arm64: entry: Place an SB sequence following an ERET instruction
Some CPUs can speculate past an ERET instruction and potentially perform
speculative accesses to memory before processing the exception return.
Since the register state is often controlled by a lower privilege level
at the point of an ERET, this could potentially be used as part of a
side-channel attack.
This patch emits an SB sequence after each ERET so that speculation is
held up on exception return.
Change-Id: I8bdcc2d9ff9d4d344c0e7a4aad809fbca52db116
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Tao Huang <huangtao@rock-chips.com>
(cherry picked from commit 679db70801)
This commit is contained in:
@@ -139,6 +139,14 @@
|
||||
csdb
|
||||
.endm
|
||||
|
||||
/*
|
||||
* Speculation barrier
|
||||
*/
|
||||
.macro sb
|
||||
dsb nsh
|
||||
isb
|
||||
.endm
|
||||
|
||||
/*
|
||||
* NOP sequence
|
||||
*/
|
||||
|
||||
@@ -373,6 +373,7 @@ alternative_insn eret, nop, ARM64_UNMAP_KERNEL_AT_EL0
|
||||
.else
|
||||
eret
|
||||
.endif
|
||||
sb
|
||||
.endm
|
||||
|
||||
.macro irq_stack_entry
|
||||
@@ -1016,6 +1017,7 @@ alternative_insn isb, nop, ARM64_WORKAROUND_QCOM_FALKOR_E1003
|
||||
mrs x30, far_el1
|
||||
.endif
|
||||
eret
|
||||
sb
|
||||
.endm
|
||||
|
||||
.align 11
|
||||
|
||||
@@ -87,6 +87,7 @@ ENTRY(__guest_enter)
|
||||
|
||||
// Do not touch any register after this!
|
||||
eret
|
||||
sb
|
||||
ENDPROC(__guest_enter)
|
||||
|
||||
ENTRY(__guest_exit)
|
||||
|
||||
@@ -96,6 +96,7 @@ el1_sync: // Guest trapped into EL2
|
||||
do_el2_call
|
||||
|
||||
eret
|
||||
sb
|
||||
|
||||
el1_hvc_guest:
|
||||
/*
|
||||
@@ -146,6 +147,7 @@ wa_epilogue:
|
||||
mov x0, xzr
|
||||
add sp, sp, #16
|
||||
eret
|
||||
sb
|
||||
|
||||
el1_trap:
|
||||
get_vcpu_ptr x1, x0
|
||||
@@ -185,6 +187,7 @@ el2_error:
|
||||
b.ne __hyp_panic
|
||||
mov x0, #(1 << ARM_EXIT_WITH_SERROR_BIT)
|
||||
eret
|
||||
sb
|
||||
|
||||
ENTRY(__hyp_do_panic)
|
||||
mov lr, #(PSR_F_BIT | PSR_I_BIT | PSR_A_BIT | PSR_D_BIT |\
|
||||
@@ -193,6 +196,7 @@ ENTRY(__hyp_do_panic)
|
||||
ldr lr, =panic
|
||||
msr elr_el2, lr
|
||||
eret
|
||||
sb
|
||||
ENDPROC(__hyp_do_panic)
|
||||
|
||||
ENTRY(__hyp_panic)
|
||||
|
||||
Reference in New Issue
Block a user