• Robin Murphy's avatar
    iommu/dma: Use correct offset in map_sg · 164afb1d
    Robin Murphy authored
    When mapping a non-page-aligned scatterlist entry, we copy the original
    offset to the output DMA address before aligning it to hand off to
    iommu_map_sg(), then later adding the IOVA page address portion to get
    the final mapped address. However, when the IOVA page size is smaller
    than the CPU page size, it is the offset within the IOVA page we want,
    not that within the CPU page, which can easily be larger than an IOVA
    page and thus result in an incorrect final address.
    
    Fix the bug by taking only the IOVA-aligned part of the offset as the
    basis of the DMA address, not the whole thing.
    Signed-off-by: default avatarRobin Murphy <robin.murphy@arm.com>
    Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
    164afb1d
dma-iommu.c 14.8 KB