summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSusheel Khiani <skhiani@codeaurora.org>2015-12-15 16:47:56 +0530
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 21:15:22 -0700
commitece4a53416de7c78d397eae80506e704639fca35 (patch)
tree44aac2ae08aaca611acc98dcc0827aff04315019
parent06ae5fe9fccd40d7c68d4076fe13483e915b3bc4 (diff)
dma-mapping: Check for valid IOVA address
We might fail in alloc_iova if we run out of virtual addresses in pool. Currently, if we fail in alloc_iova we are not checking for return value and directly going ahead and mapping invalid IOVA address. Fix this by explicitly checking for return value from alloc_iova. Change-Id: I7681d13b75f47a86f0b0b6cbf4b8405a7528ff66 Signed-off-by: Susheel Khiani <skhiani@codeaurora.org>
-rw-r--r--arch/arm/mm/dma-mapping.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index 9932ba9a59f4..ce1c0b40bb9b 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -1738,6 +1738,12 @@ int arm_iommu_map_sg(struct device *dev, struct scatterlist *sg,
total_length += s->length;
iova = __alloc_iova(mapping, total_length);
+
+ if (iova == DMA_ERROR_CODE) {
+ dev_err(dev, "Couldn't allocate iova for sg %p\n", sg);
+ return 0;
+ }
+
ret = iommu_map_sg(mapping->domain, iova, sg, nents, prot);
if (ret != total_length) {
__free_iova(mapping, iova, total_length);