linux/arch/arm/kvm
Mark Rutland 5e366aaec1 arm: KVM: Survive unknown traps from guests
[ Upstream commit f050fe7a91 ]

Currently we BUG() if we see a HSR.EC value we don't recognise. As
configurable disables/enables are added to the architecture (controlled
by RES1/RES0 bits respectively), with associated synchronous exceptions,
it may be possible for a guest to trigger exceptions with classes that
we don't recognise.

While we can't service these exceptions in a manner useful to the guest,
we can avoid bringing down the host. Per ARM DDI 0406C.c, all currently
unallocated HSR EC encodings are reserved, and per ARM DDI
0487A.k_iss10775, page G6-4395, EC values within the range 0x00 - 0x2c
are reserved for future use with synchronous exceptions, and EC values
within the range 0x2d - 0x3f may be used for either synchronous or
asynchronous exceptions.

The patch makes KVM handle any unknown EC by injecting an UNDEFINED
exception into the guest, with a corresponding (ratelimited) warning in
the host dmesg. We could later improve on this with with a new (opt-in)
exit to the host userspace.

Cc: Dave Martin <dave.martin@arm.com>
Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2017-12-14 09:28:19 +01:00
..
hyp arm/arm64: kvm: Disable branch profiling in HYP code 2017-11-08 10:08:32 +01:00
arm.c arm/arm64: KVM: Perform local TLB invalidation when multiplexing vcpus on a single CPU 2016-11-04 17:56:28 +00:00
coproc.c KVM: arm: plug potential guest hardware debug leakage 2017-05-25 15:44:44 +02:00
coproc.h ARM: KVM: Rename struct coproc_reg::is_64 to is_64bit 2016-02-29 18:34:22 +00:00
coproc_a7.c arm/arm64: KVM: Use set/way op trapping to track the state of the caches 2015-01-29 23:24:56 +01:00
coproc_a15.c arm/arm64: KVM: Use set/way op trapping to track the state of the caches 2015-01-29 23:24:56 +01:00
emulate.c arm/arm64: KVM: set right LR register value for 32 bit guest when inject abort 2017-11-08 10:08:32 +01:00
guest.c KVM: ARM: Fix typos 2016-06-14 11:16:26 +02:00
handle_exit.c arm: KVM: Survive unknown traps from guests 2017-12-14 09:28:19 +01:00
init.S arm: KVM: Allow unaligned accesses at HYP 2017-06-14 15:05:56 +02:00
interrupts.S ARM: KVM: Remove the old world switch 2016-02-29 18:34:14 +00:00
irq.h KVM: arm/arm64: Enable irqchip routing 2016-07-22 18:52:01 +01:00
Kconfig KVM: arm/arm64: Enable irqchip routing 2016-07-22 18:52:01 +01:00
Makefile ARM: KVM: Support vgic-v3 2016-09-22 13:22:21 +02:00
mmio.c arm/arm64: KVM: Remove external abort test from MMIO handling 2016-09-08 12:53:00 +02:00
mmu.c kvm: arm/arm64: Force reading uncached stage2 PGD 2017-09-07 08:35:40 +02:00
perf.c ARM: KVM: add support for minimal host vs guest profiling 2013-04-28 21:44:01 -07:00
psci.c KVM: arm/arm64: fix races in kvm_psci_vcpu_on 2017-05-20 14:28:36 +02:00
reset.c KVM: ARM: Fix typos 2016-06-14 11:16:26 +02:00
trace.h arm/arm64: KVM: Improve kvm_exit tracepoint 2015-10-22 23:01:47 +02:00