Received: by 2002:a05:6a10:d5a5:0:0:0:0 with SMTP id gn37csp4049659pxb; Mon, 4 Oct 2021 16:10:46 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzpBViaEjOH9FU46tLHV2NTSfH9A9UFvAI7GGlMr9RjAxsuOnPNuLXe6YyKf0CbN362kDfl X-Received: by 2002:a63:dd46:: with SMTP id g6mr13159220pgj.347.1633389045843; Mon, 04 Oct 2021 16:10:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1633389045; cv=none; d=google.com; s=arc-20160816; b=F9pRWdcSHhuCNF8xBwuNjWDSaxUyPZcoW6ZIegPgCWRrIZpYLDPahA+q+QIVd34Dhz /nVOr68RS3Yd2wavgEFscDkVlL8TW6JvrU6Mh3INzCIVCxjsJcu34EG8t0cwbQwy8tdk ZoK+lQSwO5Xd57f35gbZnEgIBpVyUBPFYTrIZHJEtNAskaLdNVAubMe49Sbsmw4ubTdp 8myKRWpe6HjLjdn4cbPOzJxXsiD+MbIwd0mHs+TM+Q3/8eMPaVTz8G67bqsbnF1a+FM3 xUK2cpdt+EOscHIpuGp92j0jvW5hF3v84UXAB9/FS+hc2Zxy+x/oobI3U8aFVpD0MMPo ZR8Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=RDrsjLg9cUaHYXQHAsIPU2w6J6Qe4M6VyOcpjLD7iVU=; b=I3ZVokpPolwbk2BYhPYsQ+Lagznk6HiE3/pBe3caB436UlAZHJbFs8qYPQj32gwsHg ux+7ZAzoj0uU7XlgJ9GoJHV3rt9F8N9tqwzC+azzerdpc/dODwDggWAZaHAqPRR4eRfk fhFf85HCo0kbDeCKXjhO0Gn1er1D3pT70dV8Uv2+PbdywzXdFpYcul7ynIiQJwXgNeow hj4XLUdbHf7FShL6tdLS0DXjMHLe/7E7hsaBrYiU48h/A5c+G6bdqOTy7uTlOzsAPF69 kaTiVyrDxHwTXJq60xPdVMUKrFK81YMhd5jhm2TcIV1KZ+Dyk89Szf7YV6sUjKhkgqF8 MfvQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a71si12723316pge.154.2021.10.04.16.10.32; Mon, 04 Oct 2021 16:10:45 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238318AbhJDRvR (ORCPT + 99 others); Mon, 4 Oct 2021 13:51:17 -0400 Received: from mail.kernel.org ([198.145.29.99]:32910 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233928AbhJDRu4 (ORCPT ); Mon, 4 Oct 2021 13:50:56 -0400 Received: from disco-boy.misterjones.org (disco-boy.misterjones.org [51.254.78.96]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 7B85461244; Mon, 4 Oct 2021 17:49:02 +0000 (UTC) Received: from sofa.misterjones.org ([185.219.108.64] helo=why.lan) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1mXS5E-00EhBv-SD; Mon, 04 Oct 2021 18:49:00 +0100 From: Marc Zyngier To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: will@kernel.org, qperret@google.com, dbrazdil@google.com, Steven Price , Andrew Jones , Fuad Tabba , Srivatsa Vaddagiri , Shanker R Donthineni , James Morse , Suzuki K Poulose , Alexandru Elisei , kernel-team@android.com Subject: [PATCH v2 05/16] KVM: arm64: Plumb MMIO checking into the fault handling Date: Mon, 4 Oct 2021 18:48:38 +0100 Message-Id: <20211004174849.2831548-6-maz@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211004174849.2831548-1-maz@kernel.org> References: <20211004174849.2831548-1-maz@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, will@kernel.org, qperret@google.com, dbrazdil@google.com, steven.price@arm.com, drjones@redhat.com, tabba@google.com, vatsa@codeaurora.org, sdonthineni@nvidia.com, james.morse@arm.com, suzuki.poulose@arm.com, alexandru.elisei@arm.com, kernel-team@android.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- arch/arm64/kvm/mmio.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/arch/arm64/kvm/mmio.c b/arch/arm64/kvm/mmio.c index 3dd38a151d2a..dfa375823264 100644 --- a/arch/arm64/kvm/mmio.c +++ b/arch/arm64/kvm/mmio.c @@ -6,6 +6,7 @@ #include #include +#include #include #include "trace.h" @@ -135,6 +136,13 @@ int io_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa) * volunteered to do so, and bail out otherwise. */ if (!kvm_vcpu_dabt_isvalid(vcpu)) { + /* With MMIO guard enabled, the guest should know better */ + if (test_bit(KVM_ARCH_FLAG_MMIO_GUARD, + &vcpu->kvm->arch.flags)) { + kvm_inject_dabt(vcpu, kvm_vcpu_get_hfar(vcpu)); + return 1; + } + if (test_bit(KVM_ARCH_FLAG_RETURN_NISV_IO_ABORT_TO_USER, &vcpu->kvm->arch.flags)) { run->exit_reason = KVM_EXIT_ARM_NISV; @@ -156,6 +164,15 @@ 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); + /* Check failed? Return to the guest for debriefing... */ + if (!kvm_check_ioguard_page(vcpu, fault_ipa)) + return 1; + + /* 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