• Maxim Levitsky's avatar
    KVM: nSVM: call nested_svm_load_cr3 on nested state load · 232f75d3
    Maxim Levitsky authored
    While KVM's MMU should be fully reset by loading of nested CR0/CR3/CR4
    by KVM_SET_SREGS, we are not in nested mode yet when we do it and therefore
    only root_mmu is reset.
    
    On regular nested entries we call nested_svm_load_cr3 which both updates
    the guest's CR3 in the MMU when it is needed, and it also initializes
    the mmu again which makes it initialize the walk_mmu as well when nested
    paging is enabled in both host and guest.
    
    Since we don't call nested_svm_load_cr3 on nested state load,
    the walk_mmu can be left uninitialized, which can lead to a NULL pointer
    dereference while accessing it if we happen to get a nested page fault
    right after entering the nested guest first time after the migration and
    we decide to emulate it, which leads to the emulator trying to access
    walk_mmu->gva_to_gpa which is NULL.
    
    Therefore we should call this function on nested state load as well.
    Suggested-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: default avatarMaxim Levitsky <mlevitsk@redhat.com>
    Message-Id: <20210401141814.1029036-3-mlevitsk@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    232f75d3
nested.c 36.8 KB