• Sean Christopherson's avatar
    KVM: x86: Set KVM_REQ_EVENT if run is canceled with req_immediate_exit set · 8081ad06
    Sean Christopherson authored
    Re-request KVM_REQ_EVENT if vcpu_enter_guest() bails after processing
    pending requests and an immediate exit was requested.  This fixes a bug
    where a pending event, e.g. VMX preemption timer, is delayed and/or lost
    if the exit was deferred due to something other than a higher priority
    _injected_ event, e.g. due to a pending nested VM-Enter.  This bug only
    affects the !injected case as kvm_x86_ops.cancel_injection() sets
    KVM_REQ_EVENT to redo the injection, but that's purely serendipitous
    behavior with respect to the deferred event.
    
    Note, emulated preemption timer isn't the only event that can be
    affected, it simply happens to be the only event where not re-requesting
    KVM_REQ_EVENT is blatantly visible to the guest.
    
    Fixes: f4124500 ("KVM: nVMX: Fully emulate preemption timer")
    Signed-off-by: default avatarSean Christopherson <sean.j.christopherson@intel.com>
    Message-Id: <20200423022550.15113-4-sean.j.christopherson@intel.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    8081ad06
x86.c 278 KB