Re: [PATCH 4.9 131/144] media: omap3isp: fix unbalanced dma_iommu_mapping

From: Pavel Machek
Date: Wed Aug 01 2018 - 14:34:13 EST


On Wed 2018-08-01 18:52:38, Greg Kroah-Hartman wrote:
> 4.9-stable review patch. If anyone has any objections, please let
me know.

How was this tested?

> From: Suman Anna <s-anna@xxxxxx>
>
> [ Upstream commit b7e1e6859fbf60519fd82d7120cee106a6019512 ]
>
> The OMAP3 ISP driver manages its MMU mappings through the IOMMU-aware
> ARM DMA backend. The current code creates a dma_iommu_mapping and
> attaches this to the ISP device, but never detaches the mapping in
> either the probe failure paths or the driver remove path resulting
> in an unbalanced mapping refcount and a memory leak. Fix this properly.
>
> Reported-by: Pavel Machek <pavel@xxxxxx>
> Signed-off-by: Suman Anna <s-anna@xxxxxx>
> Tested-by: Pavel Machek <pavel@xxxxxx>

Changelog implies I tested this, but I certainly did not test it in
v4.9.

Pavel

> Reviewed-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
> Signed-off-by: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx>
> Signed-off-by: Mauro Carvalho Chehab <mchehab@xxxxxxxxxxxxxxxx>
> Signed-off-by: Sasha Levin <alexander.levin@xxxxxxxxxxxxx>
> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
> ---
> drivers/media/platform/omap3isp/isp.c | 7 ++++---
> 1 file changed, 4 insertions(+), 3 deletions(-)
>
> --- a/drivers/media/platform/omap3isp/isp.c
> +++ b/drivers/media/platform/omap3isp/isp.c
> @@ -1941,6 +1941,7 @@ error_csiphy:
>
> static void isp_detach_iommu(struct isp_device *isp)
> {
> + arm_iommu_detach_device(isp->dev);
> arm_iommu_release_mapping(isp->mapping);
> isp->mapping = NULL;
> iommu_group_remove_device(isp->dev);
> @@ -1974,8 +1975,7 @@ static int isp_attach_iommu(struct isp_d
> mapping = arm_iommu_create_mapping(&platform_bus_type, SZ_1G, SZ_2G);
> if (IS_ERR(mapping)) {
> dev_err(isp->dev, "failed to create ARM IOMMU mapping\n");
> - ret = PTR_ERR(mapping);
> - goto error;
> + return PTR_ERR(mapping);
> }
>
> isp->mapping = mapping;
> @@ -1990,7 +1990,8 @@ static int isp_attach_iommu(struct isp_d
> return 0;
>
> error:
> - isp_detach_iommu(isp);
> + arm_iommu_release_mapping(isp->mapping);
> + isp->mapping = NULL;
> return ret;
> }
>
>

--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

Attachment: signature.asc
Description: Digital signature