summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars-Peter Clausen <lars@metafoo.de>2011-11-14 10:40:17 +0100
committerLokesh Pathak <lpathak@nvidia.com>2012-03-05 07:50:03 -0800
commitbc4857e90fa0c49461eaad3dd1fc25293b0c31ef (patch)
tree3bd743a7f00d0b2c95be3874812e642ca18d43c6
parent4aafc2286d96d94b93cc1f4d25aa5f9b0648acb5 (diff)
regmap: Fix memory leak in regcache_init error path
Make sure all allocated memory gets freed again in case initializing the cache failed. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Acked-by: Dimitris Papastamos <dp@opensource.wolfsonmicro.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> (cherry picked from commit bd061c78cabc28bb64ed79f784d24918b6bdb791) Change-Id: I3ece3442c4e1162e481c0c207b2add27a57a6676 Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com> Reviewed-on: http://git-master/r/87556
-rw-r--r--drivers/base/regmap/regcache.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/base/regmap/regcache.c b/drivers/base/regmap/regcache.c
index a9ce8ae6becb..5cbb44365057 100644
--- a/drivers/base/regmap/regcache.c
+++ b/drivers/base/regmap/regcache.c
@@ -143,9 +143,18 @@ int regcache_init(struct regmap *map)
if (map->cache_ops->init) {
dev_dbg(map->dev, "Initializing %s cache\n",
map->cache_ops->name);
- return map->cache_ops->init(map);
+ ret = map->cache_ops->init(map);
+ if (ret)
+ goto err_free;
}
return 0;
+
+err_free:
+ kfree(map->reg_defaults);
+ if (map->cache_free)
+ kfree(map->reg_defaults_raw);
+
+ return ret;
}
void regcache_exit(struct regmap *map)