diff options
author | Wei Yongjun <yongjun_wei@trendmicro.com.cn> | 2013-03-12 00:35:14 +0800 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2013-03-12 18:42:59 +0000 |
commit | e8b18addee32d1f389573b4c116e67ae230216ad (patch) | |
tree | 8c276fd2504407bfe3a3ba261210322a5890c623 | |
parent | f6161aa153581da4a3867a2d1a7caf4be19b6ec9 (diff) | |
download | op-kernel-dev-e8b18addee32d1f389573b4c116e67ae230216ad.zip op-kernel-dev-e8b18addee32d1f389573b4c116e67ae230216ad.tar.gz |
ASoC: core: fix possible memory leak in snd_soc_bytes_put()
'data' is malloced in snd_soc_bytes_put() and should be freed
before leaving from the error handling cases, otherwise it will cause
memory leak.
Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
-rw-r--r-- | sound/soc/soc-core.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index b7e84a7..93341de 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -3140,7 +3140,7 @@ int snd_soc_bytes_put(struct snd_kcontrol *kcontrol, if (params->mask) { ret = regmap_read(codec->control_data, params->base, &val); if (ret != 0) - return ret; + goto out; val &= params->mask; @@ -3158,13 +3158,15 @@ int snd_soc_bytes_put(struct snd_kcontrol *kcontrol, ((u32 *)data)[0] |= cpu_to_be32(val); break; default: - return -EINVAL; + ret = -EINVAL; + goto out; } } ret = regmap_raw_write(codec->control_data, params->base, data, len); +out: kfree(data); return ret; |