Fix calculation of iova address space for IOMMU-aware dma mapping.

Reported-by: Krishna Reddy <[email protected]>
Signed-off-by: Marek Szyprowski <[email protected]>
---
 arch/arm/mm/dma-mapping.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index ea5a0ad..f0f600a 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -1601,11 +1601,14 @@ struct dma_iommu_mapping *
 arm_iommu_create_mapping(struct bus_type *bus, dma_addr_t base, size_t size,
                         int order)
 {
-       unsigned int count = (size >> PAGE_SHIFT) - order;
+       unsigned int count = size >> (PAGE_SHIFT + order);
        unsigned int bitmap_size = BITS_TO_LONGS(count) * sizeof(long);
        struct dma_iommu_mapping *mapping;
        int err = -ENOMEM;
 
+       if (!count)
+               return ERR_PTR(-EINVAL);
+
        mapping = kzalloc(sizeof(struct dma_iommu_mapping), GFP_KERNEL);
        if (!mapping)
                goto err;
-- 
1.7.1.569.g6f426

_______________________________________________
iommu mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to