From patchwork Fri Aug 11 06:37:23 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Wanpeng Li X-Patchwork-Id: 9895015 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id EB10660236 for ; Fri, 11 Aug 2017 06:37:31 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DBC1128BFE for ; Fri, 11 Aug 2017 06:37:31 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D076728C01; Fri, 11 Aug 2017 06:37:31 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 601DA28BFE for ; Fri, 11 Aug 2017 06:37:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752685AbdHKGha (ORCPT ); Fri, 11 Aug 2017 02:37:30 -0400 Received: from mail-pg0-f67.google.com ([74.125.83.67]:36689 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751370AbdHKGh2 (ORCPT ); Fri, 11 Aug 2017 02:37:28 -0400 Received: by mail-pg0-f67.google.com with SMTP id y129so2444943pgy.3; Thu, 10 Aug 2017 23:37:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=rApvM3aR4AwxAylYj5PFOrLBWcryNUJTFeUa41khLyU=; b=WP3KJFmQpGtKyRvDwtJp7pNWvNW7qz6Dh878wOjD75hK8gRO7uHO3peI7iaYFaAW97 Zf9ljj0aUCTZZsFOEYWtqYzeI/TXJE/T/b3vyDnYtlaTHYK3NZtlSX+KHAYk+eHnSUJs bo5/jEc8u8QtpG18q0QcyStMbTvNAUl+u+UmsVWHHfu/M+vpPTZhHEfCEXF/3T0/S853 NKijndamgv/by+5jM0c6HzEVzgqL6KbHlvSU58ZhYIEbO+2SWUiFt5JevhVA0QQ27Gaa kbrRBvC3L9bx0mY27+W/viK9rSeJhgKdN0SirLGHRpflFZpIm9pHYVfPEzr8CK+cjO6f Kh/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=rApvM3aR4AwxAylYj5PFOrLBWcryNUJTFeUa41khLyU=; b=CxoDxnmeV1WxiGz772L0Reei5MHOpzrLr8LsTr/xC+0FrVIO1Fpv8tfxs909MQ9Mfv LuqOWjdjUf6pNhoCMiewIxVBejB0PGD5imXwQMv2pYes81XlVcFBkYXnFlDCPGeyjZEE 3ggZ0r0UwdcbQNJuw6MIfcOcRxC4cWGOu/I8ptKHmBsnd52aHZUSk0+Knxcl+9F3kze1 lGvaHANtlRI1Z/Nc1YaqAuuCXb/FCf9vKd5Hl3tQi4jM2Ao9YU7wpK9fKEeYdG+aBua2 HG2MbFh6V2u6VCd0FFyoUl3B4h8AX/rpWRGN0AsGeFUSQsc/RLqSlGi/8pW+xuN5aoIg gnGA== X-Gm-Message-State: AHYfb5ilz2ANsDNz03HJSOjJnvOeK8dQtbyGnoGNF0aObCceNZ6Uyb5S T56z7DMNBgyUO1Qh X-Received: by 10.84.245.9 with SMTP id i9mr16562728pll.312.1502433448192; Thu, 10 Aug 2017 23:37:28 -0700 (PDT) Received: from localhost ([203.205.141.123]) by smtp.gmail.com with ESMTPSA id l5sm613922pfg.50.2017.08.10.23.37.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 10 Aug 2017 23:37:27 -0700 (PDT) From: Wanpeng Li X-Google-Original-From: Wanpeng Li To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: Paolo Bonzini , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Wanpeng Li , Brijesh Singh Subject: [PATCH v2] KVM: MMU: Fix guest stuck during boot due to read/write emulation against GVA Date: Thu, 10 Aug 2017 23:37:23 -0700 Message-Id: <1502433443-4126-1-git-send-email-wanpeng.li@hotmail.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Wanpeng Li Commit c016004494b0 (KVM: x86: Avoid guest page table walk when gpa_available is set) avoids the page table walk when cr2 has already contained a valid GPA. However, that is not the truth if ept == 0 and shadow page table is used. In this scenario cr2 can just contains a valid GVA. The commit results in guest stuck during boot due to read/write emulation against GVA instead of GPA of the guest. This patch fixes it by setting the gpa_available flag under direct mode. Cc: Paolo Bonzini Cc: Radim Krčmář Cc: Brijesh Singh Signed-off-by: Wanpeng Li --- arch/x86/kvm/mmu.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index 849312d..a038879 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c @@ -3791,8 +3791,10 @@ int kvm_handle_page_fault(struct kvm_vcpu *vcpu, u64 error_code, if (need_unprotect && kvm_event_needs_reinjection(vcpu)) kvm_mmu_unprotect_page_virt(vcpu, fault_address); - vcpu->arch.gpa_available = true; - vcpu->arch.gpa_val = fault_address; + if (vcpu->arch.mmu.direct_map) { + vcpu->arch.gpa_available = true; + vcpu->arch.gpa_val = fault_address; + } r = kvm_mmu_page_fault(vcpu, fault_address, error_code, insn, insn_len); break;