• Maxim Levitsky's avatar
    KVM: x86: forcibly leave nested mode on vCPU reset · ed129ec9
    Maxim Levitsky authored
    While not obivous, kvm_vcpu_reset() leaves the nested mode by clearing
    'vcpu->arch.hflags' but it does so without all the required housekeeping.
    
    On SVM,	it is possible to have a vCPU reset while in guest mode because
    unlike VMX, on SVM, INIT's are not latched in SVM non root mode and in
    addition to that L1 doesn't have to intercept triple fault, which should
    also trigger L1's reset if happens in L2 while L1 didn't intercept it.
    
    If one of the above conditions happen, KVM will	continue to use vmcb02
    while not having in the guest mode.
    
    Later the IA32_EFER will be cleared which will lead to freeing of the
    nested guest state which will (correctly) free the vmcb02, but since
    KVM still uses it (incorrectly) this will lead to a use after free
    and kernel crash.
    
    This issue is assigned CVE-2022-3344
    
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarMaxim Levitsky <mlevitsk@redhat.com>
    Message-Id: <20221103141351.50662-5-mlevitsk@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    ed129ec9
x86.c 365 KB