linux-hardened/arch/arm64/kvm
Marc Zyngier 71dcb8be6d arm64: KVM: Allow far branches from vector slots to the main vectors
So far, the branch from the vector slots to the main vectors can at
most be 4GB from the main vectors (the reach of ADRP), and this
distance is known at compile time. If we were to remap the slots
to an unrelated VA, things would break badly.

A way to achieve VA independence would be to load the absolute
address of the vectors (__kvm_hyp_vector), either using a constant
pool or a series of movs, followed by an indirect branch.

This patches implements the latter solution, using another instance
of a patching callback. Note that since we have to save a register
pair on the stack, we branch to the *second* instruction in the
vectors in order to compensate for it. This also results in having
to adjust this balance in the invalid vector entry point.

Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
2018-03-19 13:06:01 +00:00
..
hyp arm64: KVM: Allow far branches from vector slots to the main vectors 2018-03-19 13:06:01 +00:00
debug.c KVM: arm64: Rewrite system register accessors to read/write functions 2018-03-19 10:53:16 +00:00
guest.c KVM: arm/arm64: Avoid vcpu_load for other vcpu ioctls than KVM_RUN 2018-03-19 10:53:09 +00:00
handle_exit.c arm/arm64: KVM: Advertise SMCCC v1.1 2018-02-06 22:54:01 +00:00
hyp-init.S arm64: KVM: Move vector offsetting from hyp-init.S to kvm_get_hyp_vector 2018-03-19 13:05:37 +00:00
hyp.S arm64: hyp-stub/KVM: Kill __hyp_get_vectors 2017-04-09 07:49:34 -07:00
inject_fault.c KVM: arm64: Prepare to handle deferred save/restore of ELR_EL1 2018-03-19 10:53:17 +00:00
irq.h KVM: arm/arm64: Enable irqchip routing 2016-07-22 18:52:01 +01:00
Kconfig arm64: KVM: Move BP hardening vectors into .hyp.text section 2018-03-19 13:05:49 +00:00
Makefile arm64: KVM: Dynamically patch the kernel/hyp VA mask 2018-03-19 13:03:29 +00:00
regmap.c KVM: arm64: Prepare to handle deferred save/restore of 32-bit registers 2018-03-19 10:53:18 +00:00
reset.c KVM: arm/arm64: Move timer IRQ default init to arch_timer.c 2017-06-08 16:59:56 +02:00
sys_regs.c KVM: arm64: Defer saving/restoring 32-bit sysregs to vcpu load/put 2018-03-19 10:53:18 +00:00
sys_regs.h KVM: arm64: Rewrite system register accessors to read/write functions 2018-03-19 10:53:16 +00:00
sys_regs_generic_v8.c KVM: arm64: Rewrite system register accessors to read/write functions 2018-03-19 10:53:16 +00:00
trace.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
va_layout.c arm64: KVM: Allow far branches from vector slots to the main vectors 2018-03-19 13:06:01 +00:00
vgic-sys-reg-v3.c KVM: arm/arm64: Extract GICv3 max APRn index calculation 2017-09-05 17:33:39 +02:00