• S
    KVM: x86/mmu: Do not cache MMIO accesses while memslots are in flux · a8a769e8
    Sean Christopherson 提交于
    commit ddfd1730fd829743e41213e32ccc8b4aa6dc8325 upstream.
    
    When installing new memslots, KVM sets bit 0 of the generation number to
    indicate that an update is in-progress.  Until the update is complete,
    there are no guarantees as to whether a vCPU will see the old or the new
    memslots.  Explicity prevent caching MMIO accesses so as to avoid using
    an access cached from the old memslots after the new memslots have been
    installed.
    
    Note that it is unclear whether or not disabling caching during the
    update window is strictly necessary as there is no definitive
    documentation as to what ordering guarantees KVM provides with respect
    to updating memslots.  That being said, the MMIO spte code does not
    allow reusing sptes created while an update is in-progress, and the
    associated documentation explicitly states:
    
        We do not want to use an MMIO sptes created with an odd generation
        number, ...  If KVM is unlucky and creates an MMIO spte while the
        low bit is 1, the next access to the spte will always be a cache miss.
    
    At the very least, disabling the per-vCPU MMIO cache during updates will
    make its behavior consistent with the MMIO spte behavior and
    documentation.
    
    Fixes: 56f17dd3 ("kvm: x86: fix stale mmio cache bug")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: NSean Christopherson <sean.j.christopherson@intel.com>
    Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
    a8a769e8
x86.h 8.3 KB