• Wei Liu's avatar
    xen/balloon: flush persistent kmaps in correct position · 09ed3d5b
    Wei Liu authored
    Xen balloon driver will update ballooned out pages' P2M entries to point
    to scratch page for PV guests. In 24f69373 ("xen/balloon: don't alloc
    page while non-preemptible", kmap_flush_unused was moved after updating
    P2M table. In that case for 32 bit PV guest we might end up with
    
      P2M    X -----> S  (S is mfn of balloon scratch page)
      M2P    Y -----> X  (Y is mfn in persistent kmap entry)
    
    kmap_flush_unused() iterates through all the PTEs in the kmap address
    space, using pte_to_page() to obtain the page. If the p2m and the m2p
    are inconsistent the incorrect page is returned.  This will clear
    page->address on the wrong page which may cause subsequent oopses if
    that page is currently kmap'ed.
    
    Move the flush back between get_page and __set_phys_to_machine to fix
    this.
    Signed-off-by: default avatarWei Liu <wei.liu2@citrix.com>
    Signed-off-by: default avatarDavid Vrabel <david.vrabel@citrix.com>
    Cc: stable@vger.kernel.org # 3.12+
    09ed3d5b
balloon.c 17.8 KB