xen/arm: Place a speculation barrier sequence following an eret instruction
authorJulien Grall <julien@xen.org>
Thu, 19 Dec 2019 08:12:21 +0000 (08:12 +0000)
committerJulien Grall <julien@xen.org>
Tue, 14 Jan 2020 14:26:14 +0000 (14:26 +0000)
commitddffc4d8a072f146320f4ca58c768c4b563ab571
tree5070b33d1511b31c39c579f09ea732fab9e6e6a3
parent14b62ab3e5a79816edfc6dd3afce1bb68c106ac5
xen/arm: Place a speculation barrier 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 lower privilege level
at the point of an ERET, this could potentially be used as part of a
side-channel attack.

Newer CPUs may implement a new SB barrier instruction which acts
as an architected speculation barrier. For current CPUs, the sequence
DSB; ISB is known to prevent speculation.

The latter sequence is heavier than SB but it would never be executed
(this is speculation after all!).

Introduce a new macro 'sb' that could be used when a speculation barrier
is required. For now it is using dsb; isb but this could easily be
updated to cater SB in the future.

This is XSA-312.

Signed-off-by: Julien Grall <julien@xen.org>
xen/arch/arm/arm32/entry.S
xen/arch/arm/arm64/entry.S
xen/include/asm-arm/macros.h