target/arm: Always set FAR to a known unknown value for debug exceptions
commit548f514cf89dd9ab39c0cb4c063097bccf141fdd
authorPeter Maydell <peter.maydell@linaro.org>
Fri, 23 Mar 2018 18:26:46 +0000 (23 18:26 +0000)
committerPeter Maydell <peter.maydell@linaro.org>
Fri, 23 Mar 2018 18:26:46 +0000 (23 18:26 +0000)
tree12ab611dfd064cbabd1de27da5755b8f2b5fd972
parent62b94f31d0df75187bb00684fc29e8639eacc0c5
target/arm: Always set FAR to a known unknown value for debug exceptions

For debug exceptions due to breakpoints or the BKPT instruction which
are taken to AArch32, the Fault Address Register is architecturally
UNKNOWN.  We were using that as license to simply not set
env->exception.vaddress, but this isn't correct, because it will
expose to the guest whatever old value was in that field when
arm_cpu_do_interrupt_aarch32() writes it to the guest IFSR.  That old
value might be a FAR for a previous guest EL2 or secure exception, in
which case we shouldn't show it to an EL1 or non-secure exception
handler. It might also be a non-deterministic value, which is bad
for record-and-replay.

Clear env->exception.vaddress before taking breakpoint debug
exceptions, to avoid this minor information leak.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-id: 20180320134114.30418-5-peter.maydell@linaro.org
target/arm/op_helper.c