Received: by 10.192.165.148 with SMTP id m20csp522486imm; Wed, 25 Apr 2018 03:36:34 -0700 (PDT) X-Google-Smtp-Source: AIpwx4839AFqT5+G9SBbxX5XFRX67deV+gBD434+dcEBwm1NUaIeuAPUJumd3p+pTJJ9YuPooRiA X-Received: by 10.99.119.195 with SMTP id s186mr22478310pgc.296.1524652594592; Wed, 25 Apr 2018 03:36:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524652594; cv=none; d=google.com; s=arc-20160816; b=0aIFB0Nluo9A8PsZrfAL9QSCBy77MNlRx4YM4gXcMGabzrbubEKVih91nXEc7AiYl6 lsFtnIJm5RmjyUc1aRU7Vm89kPvmcGx9NODupUU4UWvdaixSn7oLVMsQyoFTF3qjXLra LCDx5k2BA29eUFeUI7iDVngK4DRbC1xURtYi342PxjE2cYUsEmjeJIk4Dyo+hZuewSuX +6WWzSWga37qNpv7HLEfAo8mv7kGcXMYeSP6+wc/qOXonm2WkjXDnrAcuL+WCZyepwCI eaCKGqt5iRJGGUzv7nWrtQThUZl4sl9CMXPs/nqIgxlRn7VWJPZ+pvWxuOf4xsAQtnhK wofA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=WLa/EMZFBbfsnKv/sKKUQZqHAnv8V9H5tLlvGIBDLeA=; b=d58Q0HQecJrnBWI0EmvhMQUFNj8AAYadNREr6vAwzEEyoaC9b/FrbO2pWtaxg3zTa+ NTRe/TdN6fyBY6FHh/djxka2nQgOV0tM4UxwnpjTrpaRnFD3PIDgAPeBopW93kbN2h0D WcQU4AP5MmDV1xOzjMETKm5wU9A81nNu+qne7ba1is2EsAEOFiM+OpvuZLuumue063l3 nQJhNKn99ZuaeHT3Yzc5loFVE6cTlojmbteiNOC0tTMx4HmnGPSsNg8AV7sGK0eWCGxp 8w9P4WscoHU3QWOY5T7DKMA95fFhYLQzDsZKq61xaArliDc7zZR/v21w7xwSfBq6oFy+ 2pAw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e6si15006780pff.205.2018.04.25.03.36.20; Wed, 25 Apr 2018 03:36:34 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752889AbeDYKet (ORCPT + 99 others); Wed, 25 Apr 2018 06:34:49 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:50920 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751980AbeDYKel (ORCPT ); Wed, 25 Apr 2018 06:34:41 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 375F441C; Wed, 25 Apr 2018 10:34:40 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Sean Christopherson , Paolo Bonzini Subject: [PATCH 4.16 26/26] Revert "KVM: X86: Fix SMRAM accessing even if VM is shutdown" Date: Wed, 25 Apr 2018 12:33:35 +0200 Message-Id: <20180425103315.890929918@linuxfoundation.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180425103314.842517924@linuxfoundation.org> References: <20180425103314.842517924@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.16-stable review patch. If anyone has any objections, please let me know. ------------------ From: Sean Christopherson commit 2c151b25441ae5c2da66472abd165af785c9ecd2 upstream. The bug that led to commit 95e057e25892eaa48cad1e2d637b80d0f1a4fac5 was a benign warning (no adverse affects other than the warning itself) that was detected by syzkaller. Further inspection shows that the WARN_ON in question, in handle_ept_misconfig(), is unnecessary and flawed (this was also briefly discussed in the original patch: https://patchwork.kernel.org/patch/10204649). * The WARN_ON is unnecessary as kvm_mmu_page_fault() will WARN if reserved bits are set in the SPTEs, i.e. it covers the case where an EPT misconfig occurred because of a KVM bug. * The WARN_ON is flawed because it will fire on any system error code that is hit while handling the fault, e.g. -ENOMEM can be returned by mmu_topup_memory_caches() while handling a legitmate MMIO EPT misconfig. The original behavior of returning -EFAULT when userspace munmaps an HVA without first removing the memslot is correct and desirable, i.e. KVM is letting userspace know it has generated a bad address. Returning RET_PF_EMULATE masks the WARN_ON in the EPT misconfig path, but does not fix the underlying bug, i.e. the WARN_ON is bogus. Furthermore, returning RET_PF_EMULATE has the unwanted side effect of causing KVM to attempt to emulate an instruction on any page fault with an invalid HVA translation, e.g. a not-present EPT violation on a VM_PFNMAP VMA whose fault handler failed to insert a PFN. * There is no guarantee that the fault is directly related to the instruction, i.e. the fault could have been triggered by a side effect memory access in the guest, e.g. while vectoring a #DB or writing a tracing record. This could cause KVM to effectively mask the fault if KVM doesn't model the behavior leading to the fault, i.e. emulation could succeed and resume the guest. * If emulation does fail, KVM will return EMULATION_FAILED instead of -EFAULT, which is a red herring as the user will either debug a bogus emulation attempt or scratch their head wondering why we were attempting emulation in the first place. TL;DR: revert to returning -EFAULT and remove the bogus WARN_ON in handle_ept_misconfig in a future patch. This reverts commit 95e057e25892eaa48cad1e2d637b80d0f1a4fac5. Signed-off-by: Sean Christopherson Signed-off-by: Paolo Bonzini Signed-off-by: Greg Kroah-Hartman --- arch/x86/kvm/mmu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c @@ -3031,7 +3031,7 @@ static int kvm_handle_bad_page(struct kv return RET_PF_RETRY; } - return RET_PF_EMULATE; + return -EFAULT; } static void transparent_hugepage_adjust(struct kvm_vcpu *vcpu,