diff options
author | Axel Lin <axel.lin@gmail.com> | 2012-05-21 20:55:40 +0800 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2012-06-04 10:42:49 +0100 |
commit | c71c8fd4daa342ba714090586a55fc5db7eaa275 (patch) | |
tree | 3ea2ed05648bb232fa123923b666580621b8978e | |
parent | f8f5701bdaf9134b1f90e5044a82c66324d2073f (diff) | |
download | op-kernel-dev-c71c8fd4daa342ba714090586a55fc5db7eaa275.zip op-kernel-dev-c71c8fd4daa342ba714090586a55fc5db7eaa275.tar.gz |
regulator: palmas: Fix wrong kfree calls
The devm_kzalloc function eliminates the need for manual resource releasing
and simplify error handling. Resources allocated by devm_* are freed
automatically on driver detach.
Thus adding kfree calls here will introduce double free bug.
The memory of desc array and the pointers to the rdev[] are allocated by
devm_kzalloc call for struct palmas_pmic.
struct palmas_pmic {
struct palmas *palmas;
struct device *dev;
struct regulator_desc desc[PALMAS_NUM_REGS];
struct regulator_dev *rdev[PALMAS_NUM_REGS];
struct mutex mutex;
int smps123;
int smps457;
int range[PALMAS_REG_SMPS10];
};
Which means we should not call kfree for pmic->rdev and pmic->desc.
Signed-off-by: Axel Lin <axel.lin@gmail.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
-rw-r--r-- | drivers/regulator/palmas-regulator.c | 7 |
1 files changed, 0 insertions, 7 deletions
diff --git a/drivers/regulator/palmas-regulator.c b/drivers/regulator/palmas-regulator.c index c4435f6..9b7ca90 100644 --- a/drivers/regulator/palmas-regulator.c +++ b/drivers/regulator/palmas-regulator.c @@ -775,9 +775,6 @@ static __devinit int palmas_probe(struct platform_device *pdev) err_unregister_regulator: while (--id >= 0) regulator_unregister(pmic->rdev[id]); - kfree(pmic->rdev); - kfree(pmic->desc); - kfree(pmic); return ret; } @@ -788,10 +785,6 @@ static int __devexit palmas_remove(struct platform_device *pdev) for (id = 0; id < PALMAS_NUM_REGS; id++) regulator_unregister(pmic->rdev[id]); - - kfree(pmic->rdev); - kfree(pmic->desc); - kfree(pmic); return 0; } |