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-03 12:41:04 +0300
commit2a793c001dff4ef1c804ba3f46c0b8aa1f88fba7 (patch)
tree2015f9eb10d0f66df9258becd5dc92db0ab8226b
parent75c22a8551a315176179e23cc5658bc235275136 (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 0a47fe2c8ba6..448e95702744 100644
--- a/sound/soc/codecs/sgtl5000.c
+++ b/sound/soc/codecs/sgtl5000.c
@@ -866,6 +866,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);
@@ -1269,8 +1270,7 @@ err_regulator_disable:
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;
}