Messages in this thread Patch in this message | | | From | Marc Zyngier <> | Subject | [PATCH 05/16] KVM: arm64: Plumb MMIO checking into the fault handling | Date | Thu, 15 Jul 2021 17:31:48 +0100 |
| |
Plumb the MMIO checking code into the MMIO fault handling code. Nothing allows a region to be registered yet, so there should be no funtional change either.
Signed-off-by: Marc Zyngier <maz@kernel.org> --- arch/arm64/kvm/mmio.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
diff --git a/arch/arm64/kvm/mmio.c b/arch/arm64/kvm/mmio.c index 3dd38a151d2a..fd5747279d27 100644 --- a/arch/arm64/kvm/mmio.c +++ b/arch/arm64/kvm/mmio.c @@ -6,6 +6,7 @@ #include <linux/kvm_host.h> #include <asm/kvm_emulate.h> +#include <asm/kvm_mmu.h> #include <trace/events/kvm.h> #include "trace.h" @@ -130,6 +131,10 @@ int io_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa) int len; u8 data_buf[8]; + /* Check failed? Return to the guest for debriefing... */ + if (!kvm_check_ioguard_page(vcpu, fault_ipa)) + return 1; + /* * No valid syndrome? Ask userspace for help if it has * volunteered to do so, and bail out otherwise. @@ -156,6 +161,11 @@ int io_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa) len = kvm_vcpu_dabt_get_as(vcpu); rt = kvm_vcpu_dabt_get_rd(vcpu); + /* If we cross a page boundary, check that too... */ + if (((fault_ipa + len - 1) & PAGE_MASK) != (fault_ipa & PAGE_MASK) && + !kvm_check_ioguard_page(vcpu, fault_ipa + len - 1)) + return 1; + if (is_write) { data = vcpu_data_guest_to_host(vcpu, vcpu_get_reg(vcpu, rt), len); -- 2.30.2
| |