|
|
@@ -1029,6 +1029,14 @@ alternative_else_nop_endif
|
|
|
.if \regsize == 64
|
|
|
msr tpidrro_el0, x30 // Restored in kernel_ventry
|
|
|
.endif
|
|
|
+ /*
|
|
|
+ * Defend against branch aliasing attacks by pushing a dummy
|
|
|
+ * entry onto the return stack and using a RET instruction to
|
|
|
+ * enter the full-fat kernel vectors.
|
|
|
+ */
|
|
|
+ bl 2f
|
|
|
+ b .
|
|
|
+2:
|
|
|
tramp_map_kernel x30
|
|
|
#ifdef CONFIG_RANDOMIZE_BASE
|
|
|
adr x30, tramp_vectors + PAGE_SIZE
|
|
|
@@ -1041,7 +1049,7 @@ alternative_insn isb, nop, ARM64_WORKAROUND_QCOM_FALKOR_E1003
|
|
|
msr vbar_el1, x30
|
|
|
add x30, x30, #(1b - tramp_vectors)
|
|
|
isb
|
|
|
- br x30
|
|
|
+ ret
|
|
|
.endm
|
|
|
|
|
|
.macro tramp_exit, regsize = 64
|