diff options
author | Dan Carpenter <error27@gmail.com> | 2011-03-08 06:39:24 -0500 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2011-03-08 13:57:24 -0500 |
commit | 62f75aafdf180554b4fad29ff1f3827b151d39db (patch) | |
tree | 589246b139c34d3561f42115f102477899e8ae50 /sound/soc | |
parent | efb7ac3f9c28fcb379c51f987b63174f727b7453 (diff) |
ASoC: sgtl5000: use after free in ldo_regulator_register()
The "ldo" variable was dereferenced after free on the error path.
Signed-off-by: Dan Carpenter <error27@gmail.com>
Acked-by: Liam Girdwood <lrg@ti.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc')
-rw-r--r-- | sound/soc/codecs/sgtl5000.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c index b7e97c026898..1f7217f703ee 100644 --- a/sound/soc/codecs/sgtl5000.c +++ b/sound/soc/codecs/sgtl5000.c | |||
@@ -875,11 +875,13 @@ static int ldo_regulator_register(struct snd_soc_codec *codec, | |||
875 | ldo->dev = regulator_register(&ldo->desc, codec->dev, | 875 | ldo->dev = regulator_register(&ldo->desc, codec->dev, |
876 | init_data, ldo); | 876 | init_data, ldo); |
877 | if (IS_ERR(ldo->dev)) { | 877 | if (IS_ERR(ldo->dev)) { |
878 | int ret = PTR_ERR(ldo->dev); | ||
879 | |||
878 | dev_err(codec->dev, "failed to register regulator\n"); | 880 | dev_err(codec->dev, "failed to register regulator\n"); |
879 | kfree(ldo->desc.name); | 881 | kfree(ldo->desc.name); |
880 | kfree(ldo); | 882 | kfree(ldo); |
881 | 883 | ||
882 | return PTR_ERR(ldo->dev); | 884 | return ret; |
883 | } | 885 | } |
884 | 886 | ||
885 | return 0; | 887 | return 0; |