Skip to content

Commit c3c28d2

Browse files
committed
KVM: x86: do not report preemption if the steal time cache is stale
Commit 7e2175e ("KVM: x86: Fix recording of guest steal time / preempted status", 2021-11-11) open coded the previous call to kvm_map_gfn, but in doing so it dropped the comparison between the cached guest physical address and the one in the MSR. This cause an incorrect cache hit if the guest modifies the steal time address while the memslots remain the same. This can happen with kexec, in which case the preempted bit is written at the address used by the old kernel instead of the old one. Cc: David Woodhouse <[email protected]> Cc: [email protected] Fixes: 7e2175e ("KVM: x86: Fix recording of guest steal time / preempted status") Signed-off-by: Paolo Bonzini <[email protected]>
1 parent 901d376 commit c3c28d2

File tree

1 file changed

+2
-0
lines changed

1 file changed

+2
-0
lines changed

arch/x86/kvm/x86.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4715,6 +4715,7 @@ static void kvm_steal_time_set_preempted(struct kvm_vcpu *vcpu)
47154715
struct kvm_steal_time __user *st;
47164716
struct kvm_memslots *slots;
47174717
static const u8 preempted = KVM_VCPU_PREEMPTED;
4718+
gpa_t gpa = vcpu->arch.st.msr_val & KVM_STEAL_VALID_BITS;
47184719

47194720
/*
47204721
* The vCPU can be marked preempted if and only if the VM-Exit was on
@@ -4742,6 +4743,7 @@ static void kvm_steal_time_set_preempted(struct kvm_vcpu *vcpu)
47424743
slots = kvm_memslots(vcpu->kvm);
47434744

47444745
if (unlikely(slots->generation != ghc->generation ||
4746+
gpa != ghc->gpa ||
47454747
kvm_is_error_hva(ghc->hva) || !ghc->memslot))
47464748
return;
47474749

0 commit comments

Comments
 (0)