regmap: Fix memory leak in regcache_init error path
authorLars-Peter Clausen <lars@metafoo.de>
Mon, 14 Nov 2011 09:40:17 +0000 (10:40 +0100)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Mon, 14 Nov 2011 21:46:25 +0000 (21:46 +0000)
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>
drivers/base/regmap/regcache.c

index 79446262812c2ec6dfbfcd2b8fb0931a2c62a5d4..27fae58ff4cb95105a1160d40a5d3559b6d813b4 100644 (file)
@@ -144,9 +144,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)