Received: by 2002:a25:868d:0:0:0:0:0 with SMTP id z13csp2926931ybk; Mon, 18 May 2020 11:17:33 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzBPQ/beGyrOWtqk60i1QSMmm11557GiHdDS2CI7oIuMQrb6UpasrwPHiayWRv4RUio75nn X-Received: by 2002:a05:6402:c10:: with SMTP id co16mr14629867edb.315.1589825853300; Mon, 18 May 2020 11:17:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1589825853; cv=none; d=google.com; s=arc-20160816; b=ou48kin4vq1rerYp48UZaJmjXq7kOdAAb+4X7cvzAhx0q8yImaWsjfth1MiOnNGIj+ BtnBlXsli4YuuHhrllZfaQx971CwLfbs23HpxVfxA7Cm9H5XjafehSlHskuGBpIRD//s bwfF/5vDGcHBt2bd/yrdBhJpqtGH0GWhoqYFoN5J9NfiIN5jmWS3zgKggTtLqGRcGs4z Hd9KSTPByz8cLqlrRjRPOSepow5dVuYNhd0UazS6+mB1r2YoT9ItIl/SgmRn05nH+W85 x94q8rnk5zLryNhnPEZh8G87ym+8c3Ph+3TJp5kcjXiTk6Z6eMhPnlHanmEjBRk+zem9 VSGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=8WOAg6aoojCxZIF2S9//GgApwuPRRLFRfHON+NBbjA4=; b=yg3wadTTHlqlXt0REYZYuaq1JnRl7oUGRS94PdYh9TIbSzAiWzkYVSo0CsRPTDkKDQ S3QPeaLMqwq1+n1psFWGlAcPgIk+wMASq3BpHLDaXIUXLufxRFVf5XUfWaVRtAIjDhty c31k5c6aASTAFHcWx6biL//b111WSHmC3tS9stYzYnEkmqy2lv7xsGyeYm4td1pdVqwd f/S3FrjuIa8JhrRQrD8afajvJYrkTtbylj1BGhjjV5LUsfPWUOqKx0Alle86jjnXNFjy QveCF0Im1wvkXS8E6ivw97//srd5NqStUBzpNgJHF4zaEheNnUhvXo/Ka27fpAg4hgiX rsXg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="nT4se/we"; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id c1si2315864edj.326.2020.05.18.11.17.09; Mon, 18 May 2020 11:17:33 -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; dkim=pass header.i=@kernel.org header.s=default header.b="nT4se/we"; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732290AbgERSOr (ORCPT + 99 others); Mon, 18 May 2020 14:14:47 -0400 Received: from mail.kernel.org ([198.145.29.99]:41904 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732219AbgERSA1 (ORCPT ); Mon, 18 May 2020 14:00:27 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (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 7DE9120715; Mon, 18 May 2020 18:00:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1589824827; bh=qL+mTuSLwqoTGoWdrlMCBkmZTudQ4BJUVXLqeLHnYyc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=nT4se/wezt39TeGe4EKxkCmtYOUYqwEDx2gmwuR5eJQL7fg86c2nT4zkc5FjCB236 SeYkcJ8jEC5yFnbWiMgNkbJRzKWhETjCcHyL6x1w4Ikyp/PIhpkjQbjzNFfndq5duQ hruS2+mJqKmF2bgyGdig51HFyaqX1H2gr35S6TTc= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Oliver Upton , Peter Shier , Jim Mattson , Paolo Bonzini , Sasha Levin Subject: [PATCH 5.6 002/194] kvm: nVMX: reflect MTF VM-exits if injected by L1 Date: Mon, 18 May 2020 19:34:52 +0200 Message-Id: <20200518173531.722065159@linuxfoundation.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200518173531.455604187@linuxfoundation.org> References: <20200518173531.455604187@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Oliver Upton [ Upstream commit b045ae906b42afb361dc7ecf1a3cea110fb0a65f ] According to SDM 26.6.2, it is possible to inject an MTF VM-exit via the VM-entry interruption-information field regardless of the 'monitor trap flag' VM-execution control. KVM appropriately copies the VM-entry interruption-information field from vmcs12 to vmcs02. However, if L1 has not set the 'monitor trap flag' VM-execution control, KVM fails to reflect the subsequent MTF VM-exit into L1. Fix this by consulting the VM-entry interruption-information field of vmcs12 to determine if L1 has injected the MTF VM-exit. If so, reflect the exit, regardless of the 'monitor trap flag' VM-execution control. Fixes: 5f3d45e7f282 ("kvm/x86: add support for MONITOR_TRAP_FLAG") Signed-off-by: Oliver Upton Reviewed-by: Peter Shier Reviewed-by: Jim Mattson Message-Id: <20200414224746.240324-1-oupton@google.com> Signed-off-by: Paolo Bonzini Signed-off-by: Sasha Levin --- arch/x86/kvm/vmx/nested.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c index b773989308015..3a2f05ef51fa4 100644 --- a/arch/x86/kvm/vmx/nested.c +++ b/arch/x86/kvm/vmx/nested.c @@ -5504,6 +5504,23 @@ static bool nested_vmx_exit_handled_vmcs_access(struct kvm_vcpu *vcpu, return 1 & (b >> (field & 7)); } +static bool nested_vmx_exit_handled_mtf(struct vmcs12 *vmcs12) +{ + u32 entry_intr_info = vmcs12->vm_entry_intr_info_field; + + if (nested_cpu_has_mtf(vmcs12)) + return true; + + /* + * An MTF VM-exit may be injected into the guest by setting the + * interruption-type to 7 (other event) and the vector field to 0. Such + * is the case regardless of the 'monitor trap flag' VM-execution + * control. + */ + return entry_intr_info == (INTR_INFO_VALID_MASK + | INTR_TYPE_OTHER_EVENT); +} + /* * Return 1 if we should exit from L2 to L1 to handle an exit, or 0 if we * should handle it ourselves in L0 (and then continue L2). Only call this @@ -5618,7 +5635,7 @@ bool nested_vmx_exit_reflected(struct kvm_vcpu *vcpu, u32 exit_reason) case EXIT_REASON_MWAIT_INSTRUCTION: return nested_cpu_has(vmcs12, CPU_BASED_MWAIT_EXITING); case EXIT_REASON_MONITOR_TRAP_FLAG: - return nested_cpu_has_mtf(vmcs12); + return nested_vmx_exit_handled_mtf(vmcs12); case EXIT_REASON_MONITOR_INSTRUCTION: return nested_cpu_has(vmcs12, CPU_BASED_MONITOR_EXITING); case EXIT_REASON_PAUSE_INSTRUCTION: -- 2.20.1