From ed7d6c103c2688680d57509293a4e4401bd02d01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per=20=C3=85strand?= Date: Tue, 9 Nov 2021 13:56:45 +0100 Subject: Verify that dma buffer fits in the mapped range Change-Id: I1ad92264eb5dae672faf3f5b08a6f987148f629e --- kernel/ethosu_buffer.c | 11 +++++++---- 1 file 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", ðosu_buffer_fops, buf, O_RDWR | O_CLOEXEC); -- cgit v1.2.1