summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/blackfin/kernel/bfin_dma_5xx.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/arch/blackfin/kernel/bfin_dma_5xx.c b/arch/blackfin/kernel/bfin_dma_5xx.c
index 36f78c1648b..bafb6aea0bc 100644
--- a/arch/blackfin/kernel/bfin_dma_5xx.c
+++ b/arch/blackfin/kernel/bfin_dma_5xx.c
@@ -596,11 +596,18 @@ void *dma_memcpy(void *dest, const void *src, size_t size)
}
EXPORT_SYMBOL(dma_memcpy);
+/**
+ * safe_dma_memcpy - DMA memcpy w/argument checking
+ *
+ * Verify arguments are safe before heading to dma_memcpy().
+ */
void *safe_dma_memcpy(void *dest, const void *src, size_t size)
{
- void *addr;
- addr = dma_memcpy(dest, src, size);
- return addr;
+ if (!access_ok(VERIFY_WRITE, dst, size))
+ return NULL;
+ if (!access_ok(VERIFY_READ, src, size))
+ return NULL;
+ return dma_memcpy(dst, src, size);
}
EXPORT_SYMBOL(safe_dma_memcpy);