[PATCH] media: exynos4-is: fix DMA memory double free
Guangshuo Li
lgs201920130244 at gmail.com
Tue Oct 27 07:53:13 PDT 2026
fimc_is_alloc_cpu_memory() frees the coherent DMA buffer when its
DMA address does not satisfy the firmware alignment requirement,
but leaves is->memory.vaddr non-NULL.
Because firmware loading is asynchronous, this error path may run
after probe has returned successfully. A later remove can then
attempt to free the same DMA allocation again.
Set is->memory.vaddr to NULL after freeing the buffer so the
existing NULL check in fimc_is_free_cpu_memory() skips the
already-freed allocation.
This issue was found by our static analysis tool under development.
Fixes: db47622c13ae ("media: platform: exynos4-is: remove all references to physical addresses")
Cc: stable at vger.kernel.org
Signed-off-by: Guangshuo Li <lgs201920130244 at gmail.com>
---
drivers/media/platform/samsung/exynos4-is/fimc-is.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/media/platform/samsung/exynos4-is/fimc-is.c b/drivers/media/platform/samsung/exynos4-is/fimc-is.c
index b7d9bfedd590..9fdc352abfe4 100644
--- a/drivers/media/platform/samsung/exynos4-is/fimc-is.c
+++ b/drivers/media/platform/samsung/exynos4-is/fimc-is.c
@@ -346,6 +346,7 @@ static int fimc_is_alloc_cpu_memory(struct fimc_is *is)
(u32)is->memory.addr);
dma_free_coherent(dev, is->memory.size, is->memory.vaddr,
is->memory.addr);
+ is->memory.vaddr = NULL;
return -EIO;
}
--
2.43.0
More information about the linux-arm-kernel
mailing list