• Sean Christopherson's avatar
    KVM: x86/mmu: Treat invalid shadow pages as obsolete · fac026da
    Sean Christopherson authored
    Treat invalid shadow pages as obsolete to fix a bug where an obsolete
    and invalid page with a non-zero root count could become non-obsolete
    due to mmu_valid_gen wrapping.  The bug is largely theoretical with the
    current code base, as an unsigned long will effectively never wrap on
    64-bit KVM, and userspace would have to deliberately stall a vCPU in
    order to keep an obsolete invalid page on the active list while
    simultaneously modifying memslots billions of times to trigger a wrap.
    
    The obvious alternative is to use a 64-bit value for mmu_valid_gen,
    but it's actually desirable to go in the opposite direction, i.e. using
    a smaller 8-bit value to reduce KVM's memory footprint by 8 bytes per
    shadow page, and relying on proper treatment of invalid pages instead of
    preventing the generation from wrapping.
    
    Note, "Fixes" points at a commit that was at one point reverted, but has
    since been restored.
    
    Fixes: 5304b8d3 ("KVM: MMU: fast invalidate all pages")
    Signed-off-by: default avatarSean Christopherson <sean.j.christopherson@intel.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    fac026da
mmu.c 162 KB