KVM: arm64: Populate fault info for watchpoint
commit811154e234
upstream. When handling ESR_ELx_EC_WATCHPT_LOW, far_el2 member of struct kvm_vcpu_fault_info will be copied to far member of struct kvm_debug_exit_arch and exposed to the userspace. The userspace will see stale values from older faults if the fault info does not get populated. Fixes:8fb2046180
("KVM: arm64: Move early handlers to per-EC handlers") Suggested-by: Marc Zyngier <maz@kernel.org> Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Signed-off-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/20230530024651.10014-1-akihiko.odaki@daynix.com Cc: stable@vger.kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
0659aee089
commit
b1d5667afa
|
@ -351,17 +351,21 @@ static bool kvm_hyp_handle_cp15_32(struct kvm_vcpu *vcpu, u64 *exit_code)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool kvm_hyp_handle_iabt_low(struct kvm_vcpu *vcpu, u64 *exit_code)
|
static bool kvm_hyp_handle_memory_fault(struct kvm_vcpu *vcpu, u64 *exit_code)
|
||||||
{
|
{
|
||||||
if (!__populate_fault_info(vcpu))
|
if (!__populate_fault_info(vcpu))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
static bool kvm_hyp_handle_iabt_low(struct kvm_vcpu *vcpu, u64 *exit_code)
|
||||||
|
__alias(kvm_hyp_handle_memory_fault);
|
||||||
|
static bool kvm_hyp_handle_watchpt_low(struct kvm_vcpu *vcpu, u64 *exit_code)
|
||||||
|
__alias(kvm_hyp_handle_memory_fault);
|
||||||
|
|
||||||
static bool kvm_hyp_handle_dabt_low(struct kvm_vcpu *vcpu, u64 *exit_code)
|
static bool kvm_hyp_handle_dabt_low(struct kvm_vcpu *vcpu, u64 *exit_code)
|
||||||
{
|
{
|
||||||
if (!__populate_fault_info(vcpu))
|
if (kvm_hyp_handle_memory_fault(vcpu, exit_code))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (static_branch_unlikely(&vgic_v2_cpuif_trap)) {
|
if (static_branch_unlikely(&vgic_v2_cpuif_trap)) {
|
||||||
|
|
|
@ -186,6 +186,7 @@ static const exit_handler_fn hyp_exit_handlers[] = {
|
||||||
[ESR_ELx_EC_FP_ASIMD] = kvm_hyp_handle_fpsimd,
|
[ESR_ELx_EC_FP_ASIMD] = kvm_hyp_handle_fpsimd,
|
||||||
[ESR_ELx_EC_IABT_LOW] = kvm_hyp_handle_iabt_low,
|
[ESR_ELx_EC_IABT_LOW] = kvm_hyp_handle_iabt_low,
|
||||||
[ESR_ELx_EC_DABT_LOW] = kvm_hyp_handle_dabt_low,
|
[ESR_ELx_EC_DABT_LOW] = kvm_hyp_handle_dabt_low,
|
||||||
|
[ESR_ELx_EC_WATCHPT_LOW] = kvm_hyp_handle_watchpt_low,
|
||||||
[ESR_ELx_EC_PAC] = kvm_hyp_handle_ptrauth,
|
[ESR_ELx_EC_PAC] = kvm_hyp_handle_ptrauth,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -196,6 +197,7 @@ static const exit_handler_fn pvm_exit_handlers[] = {
|
||||||
[ESR_ELx_EC_FP_ASIMD] = kvm_hyp_handle_fpsimd,
|
[ESR_ELx_EC_FP_ASIMD] = kvm_hyp_handle_fpsimd,
|
||||||
[ESR_ELx_EC_IABT_LOW] = kvm_hyp_handle_iabt_low,
|
[ESR_ELx_EC_IABT_LOW] = kvm_hyp_handle_iabt_low,
|
||||||
[ESR_ELx_EC_DABT_LOW] = kvm_hyp_handle_dabt_low,
|
[ESR_ELx_EC_DABT_LOW] = kvm_hyp_handle_dabt_low,
|
||||||
|
[ESR_ELx_EC_WATCHPT_LOW] = kvm_hyp_handle_watchpt_low,
|
||||||
[ESR_ELx_EC_PAC] = kvm_hyp_handle_ptrauth,
|
[ESR_ELx_EC_PAC] = kvm_hyp_handle_ptrauth,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -110,6 +110,7 @@ static const exit_handler_fn hyp_exit_handlers[] = {
|
||||||
[ESR_ELx_EC_FP_ASIMD] = kvm_hyp_handle_fpsimd,
|
[ESR_ELx_EC_FP_ASIMD] = kvm_hyp_handle_fpsimd,
|
||||||
[ESR_ELx_EC_IABT_LOW] = kvm_hyp_handle_iabt_low,
|
[ESR_ELx_EC_IABT_LOW] = kvm_hyp_handle_iabt_low,
|
||||||
[ESR_ELx_EC_DABT_LOW] = kvm_hyp_handle_dabt_low,
|
[ESR_ELx_EC_DABT_LOW] = kvm_hyp_handle_dabt_low,
|
||||||
|
[ESR_ELx_EC_WATCHPT_LOW] = kvm_hyp_handle_watchpt_low,
|
||||||
[ESR_ELx_EC_PAC] = kvm_hyp_handle_ptrauth,
|
[ESR_ELx_EC_PAC] = kvm_hyp_handle_ptrauth,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue