KVM: arm64: Abstract the size of the HYP vectors pre-amble
The EL2 vector hardening feature causes KVM to generate vectors for each type of CPU present in the system. The generated sequences already do some of the early guest-exit work (i.e. saving registers). To avoid duplication the generated vectors branch to the original vector just after the preamble. This size is hard coded. Adding new instructions to the HYP vector causes strange side effects, which are difficult to debug as the affected code is patched in at runtime. Add KVM_VECTOR_PREAMBLE to tell kvm_patch_vector_branch() how big the preamble is. The valid_vect macro can then validate this at build time. Reviewed-by: Julien Thierry <julien.thierry@arm.com> Signed-off-by: James Morse <james.morse@arm.com> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
This commit is contained in:

committed by
Marc Zyngier

parent
2b68a2a963
commit
3dbf100b0b
@@ -170,11 +170,10 @@ void kvm_patch_vector_branch(struct alt_instr *alt,
|
||||
addr |= ((u64)origptr & GENMASK_ULL(10, 7));
|
||||
|
||||
/*
|
||||
* Branch to the second instruction in the vectors in order to
|
||||
* avoid the initial store on the stack (which we already
|
||||
* perform in the hardening vectors).
|
||||
* Branch over the preamble in order to avoid the initial store on
|
||||
* the stack (which we already perform in the hardening vectors).
|
||||
*/
|
||||
addr += AARCH64_INSN_SIZE;
|
||||
addr += KVM_VECTOR_PREAMBLE;
|
||||
|
||||
/* stp x0, x1, [sp, #-16]! */
|
||||
insn = aarch64_insn_gen_load_store_pair(AARCH64_INSN_REG_0,
|
||||
|
Reference in New Issue
Block a user