diff options
| author | Susheel Khiani <skhiani@codeaurora.org> | 2015-12-15 16:47:56 +0530 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 21:15:22 -0700 |
| commit | ece4a53416de7c78d397eae80506e704639fca35 (patch) | |
| tree | 44aac2ae08aaca611acc98dcc0827aff04315019 | |
| parent | 06ae5fe9fccd40d7c68d4076fe13483e915b3bc4 (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.c | 6 |
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); |
