mirror of https://gitee.com/openkylin/linux.git
ASoC: Remove erroneous soc_cleanup_card_resources() call
When soc_init_dai_link() call at the beginning of snd_soc_instantiate_card function fails soc_cleanup_card_resources() and then snd_soc_dapm_free() gets called with an incompletely initialized card->dapm. In particular card->dapm.card is NULL and it gets dereferenced in dapm_free_widgets(). Also dapm->list is invalid and there is an invalid pointer dereference from list_del(). The function call stack (deferred probing) on Chromebook Snow where this issue has shown up in today's -next is: snd_soc_dapm_free soc_cleanup_card_resources snd_soc_instantiate_card snd_soc_register_card devm_snd_soc_register_card snow_probe In patch70fc53734e
"ASoC: core: move DAI pre-links initiation to snd_soc_instantiate_card" there is an soc_cleanup_platform() call instead of soc_cleanup_card_resources() as in current -next. soc_cleanup_platform got renamed to soc_cleanup_legacy, then removed in commitadb76b5b9c
"ASoC: soc-core: remove legacy style dai_link". It seems in merge conflict resolution the soc_cleanup_platform() call got renamed to soc_cleanup_card_resources(), instead of being removed. Correct this by removing an unnecessary soc_cleanup_card_resources() call. Fixes:a8e992342c
("Merge branch 'asoc-5.2' into asoc-5.3") Reported-by: Marek Szyprowski <m.szyprowski@samsung.com> Suggested-by: Tzung-Bi Shih <tzungbi@google.com> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
ef8a4757a6
commit
0779935938
|
@ -1986,7 +1986,6 @@ static int snd_soc_instantiate_card(struct snd_soc_card *card)
|
||||||
for_each_card_prelinks(card, i, dai_link) {
|
for_each_card_prelinks(card, i, dai_link) {
|
||||||
ret = soc_init_dai_link(card, dai_link);
|
ret = soc_init_dai_link(card, dai_link);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
soc_cleanup_card_resources(card);
|
|
||||||
dev_err(card->dev, "ASoC: failed to init link %s: %d\n",
|
dev_err(card->dev, "ASoC: failed to init link %s: %d\n",
|
||||||
dai_link->name, ret);
|
dai_link->name, ret);
|
||||||
mutex_unlock(&client_mutex);
|
mutex_unlock(&client_mutex);
|
||||||
|
|
Loading…
Reference in New Issue