Received: by 2002:ac0:8845:0:0:0:0:0 with SMTP id g63csp251659img; Mon, 25 Feb 2019 22:34:13 -0800 (PST) X-Google-Smtp-Source: AHgI3IYNmecqavSWgcSLRk1xnuEYr9Gsnx1xrNe1nPBYAkR83FBqgfxL1NxfseyNLdNiJN1lTKeJ X-Received: by 2002:a65:47cb:: with SMTP id f11mr11680026pgs.18.1551162853401; Mon, 25 Feb 2019 22:34:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551162853; cv=none; d=google.com; s=arc-20160816; b=w04JqchD6efG0nsYp1eVDSJrBh4dZhq/lsmRfmfvFZCi9G4/i+L2P1sgEzlJd0nehQ coR61M3MvkhVKftDgmPsuMOa2eYa3ixXRlwiosKTebV0xZlrH2c/PWA6De3CkbRwYP+E 7xK9eyK4p9GBYU4x/r8u5s0245FOpiP5tlFBxnVD5D18kuA9XtJNdIFsSWc30B0DRxxS qfyG4yccPgapum/OJjEtyXDXOHnx/Tn/VDOaOTjNNmET/ZQ7FQgSeEVEg3+Aq2U13TIW VYcec2yioH9p02zYPikRDsn5wTUIdlXajqWL8TvB0lBUibmawUfm5MTMPGOKV9wLJK1B pYiQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=bhefFCMhvRWbD+B84O522F11aodNrPIbuCLz/qVeIgY=; b=rU39Abb9CCJbeZDM898/or4M2C//evlql1ApT4gQXRrP2s+Kuo51/TjqcBFySFPBNG M1rudPZT1+20DzhaQw+AeU5C8qc/BiwC4gxFJCyllpAHLkOrburAh0mOT8RUJHofKDFA UbY1kIv24OTDcga7ufMcIMJzjEh48cJ4OgsQmP0C2eHGPIeLif5LJPuwaa9HIQWsrHho WNClyRDnf1519uCNoKtV+fRplv++VH2XYdTZSiwEgphI/Uh0fzYsZLS1udJoaHH42OUN +ttFUgOSqyF4RW66HpbOLTzbdh0J0PHSJVkxZoP4q+mRWnfhqsi1naxRYPaEcOnQAv2S m2Uw== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a1si7248309pld.152.2019.02.25.22.33.58; Mon, 25 Feb 2019 22:34:13 -0800 (PST) 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726762AbfBZGc5 (ORCPT + 99 others); Tue, 26 Feb 2019 01:32:57 -0500 Received: from mga17.intel.com ([192.55.52.151]:18116 "EHLO mga17.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726552AbfBZGcz (ORCPT ); Tue, 26 Feb 2019 01:32:55 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Feb 2019 22:32:55 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,414,1544515200"; d="scan'208";a="141666149" Received: from local-michael-cet-test.sh.intel.com ([10.239.159.128]) by orsmga001.jf.intel.com with ESMTP; 25 Feb 2019 22:32:53 -0800 From: Yang Weijiang To: pbonzini@redhat.com, rkrcmar@redhat.com, sean.j.christopherson@intel.com, jmattson@google.com, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, mst@redhat.com, yu-cheng.yu@intel.com Cc: Yang Weijiang , Zhang Yi Z Subject: [PATCH v3 5/8] KVM:VMX: Pass through host CET related MSRs to Guest. Date: Mon, 25 Feb 2019 21:27:13 +0800 Message-Id: <20190225132716.6982-6-weijiang.yang@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190225132716.6982-1-weijiang.yang@intel.com> References: <20190225132716.6982-1-weijiang.yang@intel.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The CET runtime settings, i.e., CET state control bits(IA32_U_CET/ IA32_S_CET), CET SSP(IA32_PL3_SSP/IA32_PL0_SSP) and SSP table address (IA32_INTERRUPT_SSP_TABLE_ADDR) are task/thread specific, therefore, OS needs to save/restore the states properly during context switch, e.g., task/thread switching, interrupt/exception handling, it uses xsaves/xrstors to achieve that. The difference between VMCS CET area fields and xsave CET area, is that the former is for state retention during Guest/Host context switch while the latter is for state retention during OS execution. Linux currently doesn't support CPL1 and CPL2, so SSPs for these level are skipped here. Signed-off-by: Zhang Yi Z Signed-off-by: Yang Weijiang --- arch/x86/kvm/vmx.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 7bbb8b26e901..89ee086e1729 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -11769,6 +11769,7 @@ static void nested_vmx_entry_exit_ctls_update(struct kvm_vcpu *vcpu) static void vmx_cpuid_update(struct kvm_vcpu *vcpu) { struct vcpu_vmx *vmx = to_vmx(vcpu); + unsigned long *msr_bitmap; if (cpu_has_secondary_exec_ctrls()) { vmx_compute_secondary_exec_control(vmx); @@ -11786,6 +11787,18 @@ static void vmx_cpuid_update(struct kvm_vcpu *vcpu) nested_vmx_cr_fixed1_bits_update(vcpu); nested_vmx_entry_exit_ctls_update(vcpu); } + + msr_bitmap = vmx->vmcs01.msr_bitmap; + + if (guest_cpuid_has(vcpu, X86_FEATURE_SHSTK) | + guest_cpuid_has(vcpu, X86_FEATURE_IBT)) { + vmx_disable_intercept_for_msr(msr_bitmap, MSR_IA32_U_CET, MSR_TYPE_RW); + vmx_disable_intercept_for_msr(msr_bitmap, MSR_IA32_S_CET, MSR_TYPE_RW); + vmx_disable_intercept_for_msr(msr_bitmap, MSR_IA32_INT_SSP_TAB, MSR_TYPE_RW); + vmx_disable_intercept_for_msr(msr_bitmap, MSR_IA32_PL0_SSP, MSR_TYPE_RW); + vmx_disable_intercept_for_msr(msr_bitmap, MSR_IA32_PL3_SSP, MSR_TYPE_RW); + } + } static void vmx_set_supported_cpuid(u32 func, struct kvm_cpuid_entry2 *entry) -- 2.17.1