From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marc Zyngier Subject: [PATCH] arm/arm64: KVM: vgic: Handle out-of-bound MMIO access Date: Wed, 17 Feb 2016 15:34:41 +0000 Message-ID: <1455723281-23846-1-git-send-email-marc.zyngier@arm.com> Cc: kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org To: Christoffer Dall Return-path: Received: from foss.arm.com ([217.140.101.70]:33193 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1422720AbcBQPeq (ORCPT ); Wed, 17 Feb 2016 10:34:46 -0500 Sender: kvm-owner@vger.kernel.org List-ID: When performing a MMIO access via a KVM IO bus, it is possible that the access will actually be out-of-bounds (the redistributor handlers do not cover the whole device, for example). In this case, we return an error code, which leads to escaping to userspace to handle it. Not that good. Instead, let's just treat it like any other OOB access, by either ignoring the write, or by returning a bunch of zeroes. And let's keep the code quiet while we're at it, as nobody likes it when a guest can generate zillions on messages on the host's console... Signed-off-by: Marc Zyngier --- virt/kvm/arm/vgic.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/virt/kvm/arm/vgic.c b/virt/kvm/arm/vgic.c index 043032c..2358272 100644 --- a/virt/kvm/arm/vgic.c +++ b/virt/kvm/arm/vgic.c @@ -830,8 +830,11 @@ static int vgic_handle_mmio_access(struct kvm_vcpu *vcpu, offset = addr - iodev->addr; range = vgic_find_range(iodev->reg_ranges, len, offset); if (unlikely(!range || !range->handle_mmio)) { - pr_warn("Unhandled access %d %08llx %d\n", is_write, addr, len); - return -ENXIO; + /* Treat an OOR access as RAZ/WI. */ + if (!is_write) + memset(val, 0, len); + pr_debug("Unhandled access %d %08llx %d\n", is_write, addr, len); + return 0; } mmio.phys_addr = addr; -- 2.1.4