diff options
author | Kulikov Vasiliy <segooon@gmail.com> | 2010-07-16 12:16:34 -0400 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2010-07-17 14:45:56 -0400 |
commit | 51b6dfb627d785ee92c2bd1e159e2de47cdc29c3 (patch) | |
tree | ecf1b55a31e5fa96a404fa2b8383a2f71dd604fb /sound/soc | |
parent | 55938b106ff4028f9e8b23b1bcb16d7cd615bee7 (diff) |
ASoC: imx: check kzalloc() result and fix memory leak
If kzalloc() fails we must exit with -ENOMEM. Also we must free
allocated runtime->private_data on error as it would be lost on next
call to snd_imx_open().
Signed-off-by: Kulikov Vasiliy <segooon@gmail.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc')
-rw-r--r-- | sound/soc/imx/imx-pcm-dma-mx2.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/sound/soc/imx/imx-pcm-dma-mx2.c b/sound/soc/imx/imx-pcm-dma-mx2.c index 05f19c9284f4..0a595da4811d 100644 --- a/sound/soc/imx/imx-pcm-dma-mx2.c +++ b/sound/soc/imx/imx-pcm-dma-mx2.c | |||
@@ -292,12 +292,16 @@ static int snd_imx_open(struct snd_pcm_substream *substream) | |||
292 | int ret; | 292 | int ret; |
293 | 293 | ||
294 | iprtd = kzalloc(sizeof(*iprtd), GFP_KERNEL); | 294 | iprtd = kzalloc(sizeof(*iprtd), GFP_KERNEL); |
295 | if (iprtd == NULL) | ||
296 | return -ENOMEM; | ||
295 | runtime->private_data = iprtd; | 297 | runtime->private_data = iprtd; |
296 | 298 | ||
297 | ret = snd_pcm_hw_constraint_integer(substream->runtime, | 299 | ret = snd_pcm_hw_constraint_integer(substream->runtime, |
298 | SNDRV_PCM_HW_PARAM_PERIODS); | 300 | SNDRV_PCM_HW_PARAM_PERIODS); |
299 | if (ret < 0) | 301 | if (ret < 0) { |
302 | kfree(iprtd); | ||
300 | return ret; | 303 | return ret; |
304 | } | ||
301 | 305 | ||
302 | snd_soc_set_runtime_hwparams(substream, &snd_imx_hardware); | 306 | snd_soc_set_runtime_hwparams(substream, &snd_imx_hardware); |
303 | return 0; | 307 | return 0; |