aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPer Åstrand <per.astrand@arm.com>2021-11-09 13:56:45 +0100
committerKristofer Jonsson <kristofer.jonsson@arm.com>2021-11-15 14:35:24 +0000
commited7d6c103c2688680d57509293a4e4401bd02d01 (patch)
treeb9772d852debca4b259a2d0e6bdc080b85f70216
parent2ba3c1d55f638d1a2ecc5abb37f45504489bc8f0 (diff)
downloadethos-u-linux-driver-stack-21.11-rc2.tar.gz
Verify that dma buffer fits in the mapped range21.11-rc321.11-rc2
Change-Id: I1ad92264eb5dae672faf3f5b08a6f987148f629e
-rw-r--r--kernel/ethosu_buffer.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/kernel/ethosu_buffer.c b/kernel/ethosu_buffer.c
index bcc7242..43a4333 100644
--- a/kernel/ethosu_buffer.c
+++ b/kernel/ethosu_buffer.c
@@ -1,5 +1,5 @@
/*
- * (C) COPYRIGHT 2020 ARM Limited. All rights reserved.
+ * (C) COPYRIGHT 2020-2021 Arm Limited. All rights reserved.
*
* This program is free software and is provided to you under the terms of the
* GNU General Public License version 2 as published by the Free Software
@@ -67,7 +67,8 @@ static const struct file_operations ethosu_buffer_fops = {
* offset ourselves.
*/
static dma_addr_t ethosu_buffer_dma_ranges(struct device *dev,
- dma_addr_t dma_addr)
+ dma_addr_t dma_addr,
+ size_t dma_buf_size)
{
struct device_node *node = dev->of_node;
const __be32 *ranges;
@@ -107,7 +108,8 @@ static dma_addr_t ethosu_buffer_dma_ranges(struct device *dev,
dev_dbg(dev, "daddr=0x%llx, paddr=0x%llx, size=0x%llx\n",
daddr, paddr, size);
- if (dma_addr >= paddr && dma_addr < (paddr + size))
+ if (dma_addr >= paddr &&
+ (dma_addr + dma_buf_size) < (paddr + size))
return dma_addr + daddr - paddr;
}
@@ -236,7 +238,8 @@ int ethosu_buffer_create(struct ethosu_device *edev,
goto free_buf;
buf->dma_addr = ethosu_buffer_dma_ranges(buf->edev->dev,
- buf->dma_addr_orig);
+ buf->dma_addr_orig,
+ buf->capacity);
ret = anon_inode_getfd("ethosu-buffer", &ethosu_buffer_fops, buf,
O_RDWR | O_CLOEXEC);