ASoC: core: Clean up DAPM before the card debugfs
authorMark Brown <broonie@kernel.org>
Thu, 18 Aug 2016 18:32:59 +0000 (19:32 +0100)
committerMark Brown <broonie@kernel.org>
Fri, 19 Aug 2016 09:17:26 +0000 (10:17 +0100)
Both the card and DAPM cleanups recursively delete their debugfs
directories.  Since the DAPM debugfs subdirectory for the card is
located within the card debugfs this means we end up trying to double
free the DAPM subdirectory.  Reorder the cleanup to free the card
debugfs after we've cleaned up DAPM and it has deleted its own
subdirectory.

Reported-by: Russell King - ARM Linux <linux@armlinux.org.uk>
Tested-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/soc-core.c

index 16369cad480388c326f2463273e17ebef0324924..66a33f1e488173deccf644070ce7953385329c2a 100644 (file)
@@ -2083,14 +2083,13 @@ static int soc_cleanup_card_resources(struct snd_soc_card *card)
        /* remove auxiliary devices */
        soc_remove_aux_devices(card);
 
+       snd_soc_dapm_free(&card->dapm);
        soc_cleanup_card_debugfs(card);
 
        /* remove the card */
        if (card->remove)
                card->remove(card);
 
-       snd_soc_dapm_free(&card->dapm);
-
        snd_card_free(card->snd_card);
        return 0;