Commit 02b57943 authored by John Tsichritzis's avatar John Tsichritzis
Browse files

Apply stricter speculative load restriction


The SCTLR.DSSBS bit is zero by default thus disabling speculative loads.
However, we also explicitly set it to zero for BL2 and TSP images when
each image initialises its context. This is done to ensure that the
image environment is initialised in a safe state, regardless of the
reset value of the bit.

Change-Id: If25a8396641edb640f7f298b8d3309d5cba3cd79
Signed-off-by: default avatarJohn Tsichritzis <john.tsichritzis@arm.com>
Showing with 19 additions and 11 deletions
+19 -11
...@@ -42,12 +42,13 @@ func bl2_entrypoint ...@@ -42,12 +42,13 @@ func bl2_entrypoint
stcopr r0, VBAR stcopr r0, VBAR
isb isb
/* ----------------------------------------------------- /* --------------------------------------------------------
* Enable the instruction cache * Enable the instruction cache - disable speculative loads
* ----------------------------------------------------- * --------------------------------------------------------
*/ */
ldcopr r0, SCTLR ldcopr r0, SCTLR
orr r0, r0, #SCTLR_I_BIT orr r0, r0, #SCTLR_I_BIT
bic r0, r0, #SCTLR_DSSBS_BIT
stcopr r0, SCTLR stcopr r0, SCTLR
isb isb
......
...@@ -41,12 +41,14 @@ func bl2_entrypoint ...@@ -41,12 +41,14 @@ func bl2_entrypoint
/* --------------------------------------------- /* ---------------------------------------------
* Enable the instruction cache, stack pointer * Enable the instruction cache, stack pointer
* and data access alignment checks * and data access alignment checks and disable
* speculative loads.
* --------------------------------------------- * ---------------------------------------------
*/ */
mov x1, #(SCTLR_I_BIT | SCTLR_A_BIT | SCTLR_SA_BIT) mov x1, #(SCTLR_I_BIT | SCTLR_A_BIT | SCTLR_SA_BIT)
mrs x0, sctlr_el1 mrs x0, sctlr_el1
orr x0, x0, x1 orr x0, x0, x1
bic x0, x0, #SCTLR_DSSBS_BIT
msr sctlr_el1, x0 msr sctlr_el1, x0
isb isb
......
/* /*
* Copyright (c) 2016, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2016-2019, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -41,12 +41,13 @@ func bl2u_entrypoint ...@@ -41,12 +41,13 @@ func bl2u_entrypoint
stcopr r0, VBAR stcopr r0, VBAR
isb isb
/* ----------------------------------------------------- /* --------------------------------------------------------
* Enable the instruction cache * Enable the instruction cache - disable speculative loads
* ----------------------------------------------------- * --------------------------------------------------------
*/ */
ldcopr r0, SCTLR ldcopr r0, SCTLR
orr r0, r0, #SCTLR_I_BIT orr r0, r0, #SCTLR_I_BIT
bic r0, r0, #SCTLR_DSSBS_BIT
stcopr r0, SCTLR stcopr r0, SCTLR
isb isb
......
/* /*
* Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2015-2019, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -38,12 +38,14 @@ func bl2u_entrypoint ...@@ -38,12 +38,14 @@ func bl2u_entrypoint
/* --------------------------------------------- /* ---------------------------------------------
* Enable the instruction cache, stack pointer * Enable the instruction cache, stack pointer
* and data access alignment checks * and data access alignment checks and disable
* speculative loads.
* --------------------------------------------- * ---------------------------------------------
*/ */
mov x1, #(SCTLR_I_BIT | SCTLR_A_BIT | SCTLR_SA_BIT) mov x1, #(SCTLR_I_BIT | SCTLR_A_BIT | SCTLR_SA_BIT)
mrs x0, sctlr_el1 mrs x0, sctlr_el1
orr x0, x0, x1 orr x0, x0, x1
bic x0, x0, #SCTLR_DSSBS_BIT
msr sctlr_el1, x0 msr sctlr_el1, x0
isb isb
......
...@@ -63,12 +63,14 @@ func tsp_entrypoint _align=3 ...@@ -63,12 +63,14 @@ func tsp_entrypoint _align=3
/* --------------------------------------------- /* ---------------------------------------------
* Enable the instruction cache, stack pointer * Enable the instruction cache, stack pointer
* and data access alignment checks * and data access alignment checks and disable
* speculative loads.
* --------------------------------------------- * ---------------------------------------------
*/ */
mov x1, #(SCTLR_I_BIT | SCTLR_A_BIT | SCTLR_SA_BIT) mov x1, #(SCTLR_I_BIT | SCTLR_A_BIT | SCTLR_SA_BIT)
mrs x0, sctlr_el1 mrs x0, sctlr_el1
orr x0, x0, x1 orr x0, x0, x1
bic x0, x0, #SCTLR_DSSBS_BIT
msr sctlr_el1, x0 msr sctlr_el1, x0
isb isb
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment