6c403b7 intel-iommu: send PSI always even if across PDEs

1 file Authored by Peter Xu 5 years ago, Committed by Michael Roth 5 years ago,
    intel-iommu: send PSI always even if across PDEs
    
    SECURITY IMPLICATION: without this patch, any guest with both assigned
    device and a vIOMMU might encounter stale IO page mappings even if guest
    has already unmapped the page, which may lead to guest memory
    corruption.  The stale mappings will only be limited to the guest's own
    memory range, so it should not affect the host memory or other guests on
    the host.
    
    During IOVA page table walking, there is a special case when the PSI
    covers one whole PDE (Page Directory Entry, which contains 512 Page
    Table Entries) or more.  In the past, we skip that entry and we don't
    notify the IOMMU notifiers.  This is not correct.  We should send UNMAP
    notification to registered UNMAP notifiers in this case.
    
    For UNMAP only notifiers, this might cause IOTLBs cached in the devices
    even if they were already invalid.  For MAP/UNMAP notifiers like
    vfio-pci, this will cause stale page mappings.
    
    This special case doesn't trigger often, but it is very easy to be
    triggered by nested device assignments, since in that case we'll
    possibly map the whole L2 guest RAM region into the device's IOVA
    address space (several GBs at least), which is far bigger than normal
    kernel driver usages of the device (tens of MBs normally).
    
    Without this patch applied to L1 QEMU, nested device assignment to L2
    guests will dump some errors like:
    
    qemu-system-x86_64: VFIO_MAP_DMA: -17
    qemu-system-x86_64: vfio_dma_map(0x557305420c30, 0xad000, 0x1000,
                        0x7f89a920d000) = -17 (File exists)
    
    CC: QEMU Stable <qemu-stable@nongnu.org>
    Acked-by: Jason Wang <jasowang@redhat.com>
    [peterx: rewrite the commit message]
    Signed-off-by: Peter Xu <peterx@redhat.com>
    Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    
    (cherry picked from commit 36d2d52bdb45f5b753a61fdaf0fe7891f1f5b61d)
    Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
    
        
file modified
+30 -12