Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit af32b360 authored by Julia Lawall's avatar Julia Lawall Committed by David Woodhouse
Browse files

mtd: lantiq-flash: drop iounmap for devm_ allocated data

Data allocated with devm_ioremap or devm_ioremap_nocache should not be
freed using iounmap, because doing so causes a dangling pointer, and a
subsequent double free.

The semantic match that finds this problem is as follows:
(http://coccinelle.lip6.fr/

)

// <smpl>
@r@
expression x;
@@
(
 x = devm_ioremap(...)
|
 x = devm_ioremap_nocache(...)
)

@@
expression r.x;
@@
* iounmap(x)
// </smpl>

Signed-off-by: default avatarJulia Lawall <julia@diku.dk>
Signed-off-by: default avatarArtem Bityutskiy <artem.bityutskiy@intel.com>
Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
parent 775c3220
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -159,7 +159,7 @@ ltq_mtd_probe(struct platform_device *pdev)
	if (!ltq_mtd->mtd) {
		dev_err(&pdev->dev, "probing failed\n");
		err = -ENXIO;
		goto err_unmap;
		goto err_free;
	}

	ltq_mtd->mtd->owner = THIS_MODULE;
@@ -179,8 +179,6 @@ ltq_mtd_probe(struct platform_device *pdev)

err_destroy:
	map_destroy(ltq_mtd->mtd);
err_unmap:
	iounmap(ltq_mtd->map->virt);
err_free:
	kfree(ltq_mtd->map);
err_out:
@@ -198,8 +196,6 @@ ltq_mtd_remove(struct platform_device *pdev)
			mtd_device_unregister(ltq_mtd->mtd);
			map_destroy(ltq_mtd->mtd);
		}
		if (ltq_mtd->map->virt)
			iounmap(ltq_mtd->map->virt);
		kfree(ltq_mtd->map);
		kfree(ltq_mtd);
	}