ASoC: meson: fix memory leak of links if allocation of ldata fails

Currently if the allocation of ldata fails the error return path
does not kfree the allocated links object.  Fix this by adding
an error exit return path that performs the necessary kfree'ing.

Fixes: 7864a79f37 ("ASoC: meson: add axg sound card support")
Signed-off-by: Colin Ian King <colin.king@canonical.com>
Addresses-Coverity: ("Resource leak")
Link: https://lore.kernel.org/r/20200604171216.60043-1-colin.king@canonical.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Colin Ian King 2020-06-04 18:12:16 +01:00 committed by Mark Brown
parent 97ed3e509e
commit 6e801dc411
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0
1 changed files with 12 additions and 5 deletions

View File

@ -49,19 +49,26 @@ int meson_card_reallocate_links(struct snd_soc_card *card,
links = krealloc(priv->card.dai_link, links = krealloc(priv->card.dai_link,
num_links * sizeof(*priv->card.dai_link), num_links * sizeof(*priv->card.dai_link),
GFP_KERNEL | __GFP_ZERO); GFP_KERNEL | __GFP_ZERO);
if (!links)
goto err_links;
ldata = krealloc(priv->link_data, ldata = krealloc(priv->link_data,
num_links * sizeof(*priv->link_data), num_links * sizeof(*priv->link_data),
GFP_KERNEL | __GFP_ZERO); GFP_KERNEL | __GFP_ZERO);
if (!ldata)
if (!links || !ldata) { goto err_ldata;
dev_err(priv->card.dev, "failed to allocate links\n");
return -ENOMEM;
}
priv->card.dai_link = links; priv->card.dai_link = links;
priv->link_data = ldata; priv->link_data = ldata;
priv->card.num_links = num_links; priv->card.num_links = num_links;
return 0; return 0;
err_ldata:
kfree(links);
err_links:
dev_err(priv->card.dev, "failed to allocate links\n");
return -ENOMEM;
} }
EXPORT_SYMBOL_GPL(meson_card_reallocate_links); EXPORT_SYMBOL_GPL(meson_card_reallocate_links);