Patch "KVM: x86: Mask off unsupported and unknown bits of IA32_ARCH_CAPABILITIES" has been added to the 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    KVM: x86: Mask off unsupported and unknown bits of IA32_ARCH_CAPABILITIES

to the 5.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     kvm-x86-mask-off-unsupported-and-unknown-bits-of-ia3.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 2dd63a1f1cd332c7c5430c9a0390fe7736caa0b8
Author: Jim Mattson <jmattson@xxxxxxxxxx>
Date:   Tue Aug 30 10:49:47 2022 -0700

    KVM: x86: Mask off unsupported and unknown bits of IA32_ARCH_CAPABILITIES
    
    [ Upstream commit 0204750bd4c6ccc2fb7417618477f10373b33f56 ]
    
    KVM should not claim to virtualize unknown IA32_ARCH_CAPABILITIES
    bits. When kvm_get_arch_capabilities() was originally written, there
    were only a few bits defined in this MSR, and KVM could virtualize all
    of them. However, over the years, several bits have been defined that
    KVM cannot just blindly pass through to the guest without additional
    work (such as virtualizing an MSR promised by the
    IA32_ARCH_CAPABILITES feature bit).
    
    Define a mask of supported IA32_ARCH_CAPABILITIES bits, and mask off
    any other bits that are set in the hardware MSR.
    
    Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx>
    Fixes: 5b76a3cff011 ("KVM: VMX: Tell the nested hypervisor to skip L1D flush on vmentry")
    Signed-off-by: Jim Mattson <jmattson@xxxxxxxxxx>
    Reviewed-by: Vipin Sharma <vipinsh@xxxxxxxxxx>
    Reviewed-by: Xiaoyao Li <xiaoyao.li@xxxxxxxxx>
    Message-Id: <20220830174947.2182144-1-jmattson@xxxxxxxxxx>
    Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 5f4f855bb3b10..c5a08ec348e6f 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -1364,12 +1364,32 @@ static const u32 msr_based_features_all[] = {
 static u32 msr_based_features[ARRAY_SIZE(msr_based_features_all)];
 static unsigned int num_msr_based_features;
 
+/*
+ * Some IA32_ARCH_CAPABILITIES bits have dependencies on MSRs that KVM
+ * does not yet virtualize. These include:
+ *   10 - MISC_PACKAGE_CTRLS
+ *   11 - ENERGY_FILTERING_CTL
+ *   12 - DOITM
+ *   18 - FB_CLEAR_CTRL
+ *   21 - XAPIC_DISABLE_STATUS
+ *   23 - OVERCLOCKING_STATUS
+ */
+
+#define KVM_SUPPORTED_ARCH_CAP \
+	(ARCH_CAP_RDCL_NO | ARCH_CAP_IBRS_ALL | ARCH_CAP_RSBA | \
+	 ARCH_CAP_SKIP_VMENTRY_L1DFLUSH | ARCH_CAP_SSB_NO | ARCH_CAP_MDS_NO | \
+	 ARCH_CAP_PSCHANGE_MC_NO | ARCH_CAP_TSX_CTRL_MSR | ARCH_CAP_TAA_NO | \
+	 ARCH_CAP_SBDR_SSDP_NO | ARCH_CAP_FBSDP_NO | ARCH_CAP_PSDP_NO | \
+	 ARCH_CAP_FB_CLEAR | ARCH_CAP_RRSBA | ARCH_CAP_PBRSB_NO)
+
 static u64 kvm_get_arch_capabilities(void)
 {
 	u64 data = 0;
 
-	if (boot_cpu_has(X86_FEATURE_ARCH_CAPABILITIES))
+	if (boot_cpu_has(X86_FEATURE_ARCH_CAPABILITIES)) {
 		rdmsrl(MSR_IA32_ARCH_CAPABILITIES, data);
+		data &= KVM_SUPPORTED_ARCH_CAP;
+	}
 
 	/*
 	 * If nx_huge_pages is enabled, KVM's shadow paging will ensure that
@@ -1417,9 +1437,6 @@ static u64 kvm_get_arch_capabilities(void)
 		 */
 	}
 
-	/* Guests don't need to know "Fill buffer clear control" exists */
-	data &= ~ARCH_CAP_FB_CLEAR_CTRL;
-
 	return data;
 }
 



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux