ASoC: compress: Only call free for components which have been opened
authorCharles Keepax <ckeepax@opensource.cirrus.com>
Tue, 24 Apr 2018 15:39:01 +0000 (16:39 +0100)
committerMark Brown <broonie@kernel.org>
Thu, 26 Apr 2018 11:23:44 +0000 (12:23 +0100)
commit572e6c8dd174bc6fc7ba5d9b6935e9ec8d2660f5
tree7bcec435386fb7abebe7d6854e493cc1acbdb35f
parent483abace7bdd31c527d821d3c28cb2879c84b1c8
ASoC: compress: Only call free for components which have been opened

The core should only call free on a component if said component has
already had open called on it. This is not presently the case and most
compressed drivers in the kernel assume it will be. This causes null
pointer dereferences in the drivers as they attempt clean up for stuff
that was never put in place.

This is fixed by aborting calling open callbacks once a failure is
encountered and then during clean up only iterating through the
component list to that point.

This is a fairly quick fix to the issue, to allow backporting. There
is more refactoring to follow to tidy the code up a little.

Fixes: 9e7e3738ab0e ("ASoC: snd_soc_component_driver has snd_compr_ops")
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Acked-by: Vinod Koul <vkoul@kernel.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/soc-compress.c