summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleksandr Suvorov <oleksandr.suvorov@toradex.com>2019-05-03 10:49:04 +0300
committerOleksandr Suvorov <oleksandr.suvorov@toradex.com>2019-05-06 11:59:48 +0300
commit08092fdffc65598a66b4047290ee29f5ef3cb7f9 (patch)
tree84844574c9768ee7bcdb4fa7b2b9ca23decacf66
parenta869a7cfc64e8aa9a69d6eb10cd34eaf92c44b8f (diff)
ASoC: sgtl5000: Fix possible dereference crash
- ldo_regulator_remove() doesn't reset sgtl5000->ldo so it is possible to dereference members of previously freed struct ldo. Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
-rw-r--r--sound/soc/codecs/sgtl5000.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c
index 4124e7b48eb7..02387d34065f 100644
--- a/sound/soc/codecs/sgtl5000.c
+++ b/sound/soc/codecs/sgtl5000.c
@@ -895,6 +895,7 @@ static int ldo_regulator_remove(struct snd_soc_codec *codec)
if (!ldo)
return 0;
+ sgtl5000->ldo = NULL;
regulator_unregister(ldo->dev);
kfree(ldo->desc.name);
kfree(ldo);
@@ -1275,8 +1276,7 @@ static int sgtl5000_enable_regulators(struct snd_soc_codec *codec)
err_regulator_free:
regulator_bulk_free(ARRAY_SIZE(sgtl5000->supplies),
sgtl5000->supplies);
- if (! external_vddd)
- ldo_regulator_remove(codec);
+ ldo_regulator_remove(codec);
return ret;
}