diff --git a/patches/kernel/0008-Revert-KVM-x86-Manually-calculate-reserved-bits-when.patch b/patches/kernel/0008-Revert-KVM-x86-Manually-calculate-reserved-bits-when.patch new file mode 100644 index 0000000..875320b --- /dev/null +++ b/patches/kernel/0008-Revert-KVM-x86-Manually-calculate-reserved-bits-when.patch @@ -0,0 +1,50 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Thomas Lamprecht +Date: Mon, 11 Nov 2019 11:12:32 +0100 +Subject: [PATCH] Revert "KVM: x86: Manually calculate reserved bits when + loading PDPTRS" + +This was back-ported from the 5.4 merge window, on kernels <5.3 it +makes issues with old intel CPUs (like more than ~ 10 years ago +released ones). + +Reverse bisect does not show a clear commit which would fix that, so +revert this for now. + +This reverts commit 208007519a7385a57b0c0a3c180142a521594876. + +Signed-off-by: Thomas Lamprecht +--- + arch/x86/kvm/x86.c | 11 +++-------- + 1 file changed, 3 insertions(+), 8 deletions(-) + +diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c +index f832fa5011cd..fd00cfdfb6c3 100644 +--- a/arch/x86/kvm/x86.c ++++ b/arch/x86/kvm/x86.c +@@ -672,14 +672,8 @@ static int kvm_read_nested_guest_page(struct kvm_vcpu *vcpu, gfn_t gfn, + data, offset, len, access); + } + +-static inline u64 pdptr_rsvd_bits(struct kvm_vcpu *vcpu) +-{ +- return rsvd_bits(cpuid_maxphyaddr(vcpu), 63) | rsvd_bits(5, 8) | +- rsvd_bits(1, 2); +-} +- + /* +- * Load the pae pdptrs. Return 1 if they are all valid, 0 otherwise. ++ * Load the pae pdptrs. Return true is they are all valid. + */ + int load_pdptrs(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu, unsigned long cr3) + { +@@ -698,7 +692,8 @@ int load_pdptrs(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu, unsigned long cr3) + } + for (i = 0; i < ARRAY_SIZE(pdpte); ++i) { + if ((pdpte[i] & PT_PRESENT_MASK) && +- (pdpte[i] & pdptr_rsvd_bits(vcpu))) { ++ (pdpte[i] & ++ vcpu->arch.mmu->guest_rsvd_check.rsvd_bits_mask[0][2])) { + ret = 0; + goto out; + }