diff options
author | Oleksandr Suvorov <oleksandr.suvorov@toradex.com> | 2019-05-03 10:49:04 +0300 |
---|---|---|
committer | Oleksandr Suvorov <oleksandr.suvorov@toradex.com> | 2019-05-06 11:59:48 +0300 |
commit | 08092fdffc65598a66b4047290ee29f5ef3cb7f9 (patch) | |
tree | 84844574c9768ee7bcdb4fa7b2b9ca23decacf66 | |
parent | a869a7cfc64e8aa9a69d6eb10cd34eaf92c44b8f (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.c | 4 |
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; } |