ASoC: wm_adsp: Fix memory leak in wm_adsp_setup_algs
Subsystems (3)
PATCH v2 1/1 ASoC: wm_adsp: Fix memory leak in wm_adsp_setup_algs
From: JS Park <[email protected]>
If we fail to allocate memory for one of the memory regions whilst parsing the DSP firmware, we will leak the buffer holding the algorithm information. This patch ensures that this buffer is freed on all error paths.
Signed-off-by JS Park <[email protected]>
Signed-off-by Charles Keepax <[email protected]>
--- sound/soc/codecs/wm_adsp.c | 30 ++++++++++++++++++++---------- 1 files changed, 20 insertions(+), 10 deletions(-)
sound/soc/codecs/wm_adsp.c +20 -10
@@ -1053,8 +1053,10 @@ static int wm_adsp_setup_algs(struct wm_adsp *dsp) be32_to_cpu(adsp1_alg[i].zm)); region =kzalloc (sizeof (*region),GFP_KERNEL ); -if (!region) -return -ENOMEM ; +if (!region) { + ret = -ENOMEM ; + goto out; + } region->type =WMFW_ADSP1_DM ; region->alg =be32_to_cpu (adsp1_alg[i].alg.id); region->base =be32_to_cpu (adsp1_alg[i].dm);
@@ -1071,8 +1073,10 @@ static int wm_adsp_setup_algs(struct wm_adsp *dsp) } region =kzalloc (sizeof (*region),GFP_KERNEL ); -if (!region) -return -ENOMEM ; +if (!region) { + ret = -ENOMEM ; + goto out; + } region->type =WMFW_ADSP1_ZM ; region->alg =be32_to_cpu (adsp1_alg[i].alg.id); region->base =be32_to_cpu (adsp1_alg[i].zm);
@@ -1101,8 +1105,10 @@ static int wm_adsp_setup_algs(struct wm_adsp *dsp) be32_to_cpu(adsp2_alg[i].zm)); region =kzalloc (sizeof (*region),GFP_KERNEL ); -if (!region) -return -ENOMEM ; +if (!region) { + ret = -ENOMEM ; + goto out; + } region->type =WMFW_ADSP2_XM ; region->alg =be32_to_cpu (adsp2_alg[i].alg.id); region->base =be32_to_cpu (adsp2_alg[i].xm);
@@ -1119,8 +1125,10 @@ static int wm_adsp_setup_algs(struct wm_adsp *dsp) } region =kzalloc (sizeof (*region),GFP_KERNEL ); -if (!region) -return -ENOMEM ; +if (!region) { + ret = -ENOMEM ; + goto out; + } region->type =WMFW_ADSP2_YM ; region->alg =be32_to_cpu (adsp2_alg[i].alg.id); region->base =be32_to_cpu (adsp2_alg[i].ym);
@@ -1137,8 +1145,10 @@ static int wm_adsp_setup_algs(struct wm_adsp *dsp) } region =kzalloc (sizeof (*region),GFP_KERNEL ); -if (!region) -return -ENOMEM ; +if (!region) { + ret = -ENOMEM ; + goto out; + } region->type =WMFW_ADSP2_ZM ; region->alg =be32_to_cpu (adsp2_alg[i].alg.id); region->base =be32_to_cpu (adsp2_alg[i].zm);
Signature · 1 line
1.7.2.5
Mark Brown
maintainerQuoted 6 lines · Charles Keepax
From: JS Park <[email protected]>
If we fail to allocate memory for one of the memory regions whilst parsing the DSP firmware, we will leak the buffer holding the algorithm information. This patch ensures that this buffer is freed on all error paths.
I already applied this, this was a request for future patches.