linux/sound/soc
Takashi Iwai b61880371f ASoC: Fix use-after-free at card unregistration
commit 4efda5f213 upstream.

soc_cleanup_card_resources() call snd_card_free() at the last of its
procedure.  This turned out to lead to a use-after-free.
PCM runtimes have been already removed via soc_remove_pcm_runtimes(),
while it's dereferenced later in soc_pcm_free() called via
snd_card_free().

The fix is simple: just move the snd_card_free() call to the beginning
of the whole procedure.  This also gives another benefit: it
guarantees that all operations have been shut down before actually
releasing the resources, which was racy until now.

Reported-and-tested-by: Robert Jarzmik <robert.jarzmik@free.fr>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Mark Brown <broonie@kernel.org>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
History 2017-09-15 18:29:50 +01:00
..
adi ASoC: axi-{spdif,i2s}: Remove SND_DMAENGINE_PCM_FLAG_NO_RESIDUE flag 2014-01-14 21:28:39 +00:00
atmel ASoC: atmel_ssc_dai: fix start event for I2S mode 2015-02-10 13:38:44 +00:00
au1x ASoC: au1x: Don't set unused struct snd_pcm_hardware fields 2013-12-21 14:23:20 +00:00
bcm ASoC: bcm: Remove obsoleted Kconfig dependency 2014-01-08 20:00:04 +00:00
blackfin ASoC: blackfin: use samples to set silence 2014-09-17 09:22:05 -07:00
cirrus Merge remote-tracking branch 'asoc/topic/cirrus' into asoc-next 2014-03-13 14:19:11 +00:00
codecs ASoC: rt5640: use msleep() for long delays 2017-06-05 21:16:50 +01:00
davinci ASoC: davinci-evm: drop un-necessary remove function 2015-05-05 11:09:37 +01:00
dwc ASoC: dwc: correct irq clear method 2015-10-30 13:59:28 +00:00
fsl ASoC: imx-wm8962: Add a missing error check 2015-07-15 10:01:26 +01:00
generic ASoC: simple-card: Fix crash in asoc_simple_card_unref() 2015-02-04 10:58:03 +00:00
intel ASoC: Intel: HSW/BDW only support S16 and S24 formats. 2014-11-13 11:48:30 +00:00
jz4740 Merge remote-tracking branches 'asoc/topic/headers', 'asoc/topic/intel', 'asoc/topic/jz4740', 'asoc/topic/max98090', 'asoc/topic/max98095', 'asoc/topic/mc13783' and 'asoc/topic/multicodec' into asoc-next 2014-05-22 00:23:54 +01:00
kirkwood ASoC: Remove needless snd_soc_dapm_enable_pin() from machine driver inits 2014-05-19 17:19:18 +01:00
mxs Merge remote-tracking branches 'asoc/topic/adsp', 'asoc/topic/atmel', 'asoc/topic/bcm2835', 'asoc/topic/docs', 'asoc/topic/fsl', 'asoc/topic/generic', 'asoc/topic/kirkwood', 'asoc/topic/mc13783', 'asoc/topic/mxs', 'asoc/topic/nuc900', 'asoc/topic/sai', 'asoc/topic/sh', 'asoc/topic/ssm2602', 'asoc/topic/tlv320aic3x', 'asoc/topic/twl4030', 'asoc/topic/ux500', 'asoc/topic/width' and 'asoc/topic/x86' into for-tiwai 2014-01-16 12:44:01 +00:00
nuc900 ASoC: nuc900: export nuc900_ac97_data 2014-04-30 20:32:20 -07:00
omap ASoC: omap-mcpdm: Fix irq resource handling 2016-11-20 01:17:16 +00:00
pxa ASoC: fix broken pxa SoC support 2015-10-19 10:54:37 +01:00
s6000 ASoC: s6105-ipcam: Convert to table based DAPM setup 2014-03-13 11:43:30 +00:00
samsung ASoC: s3c24xx: use const snd_soc_component_driver pointer 2016-05-01 00:05:45 +02:00
sh ASoC: rsnd: remove unsupported PAUSE flag 2014-12-01 10:02:11 +00:00
sirf ASoC: sirf: Move the tx rx enable from port to codec, that will not need register sharing 2014-04-14 17:28:17 +01:00
spear ASoC: spear_pcm: Use devm_snd_dmaengine_pcm_register to fix resource leak 2015-09-30 13:20:47 +01:00
tegra Merge remote-tracking branch 'asoc/topic/tegra' into asoc-next 2014-06-03 10:39:59 +01:00
txx9 ASoC: txx9aclc_ac97: Fix kernel crash on probe 2014-02-16 08:36:40 +08:00
ux500 ASoC: mop500_ab8500: Replace instances of rtd->codec->card with rtd->card 2014-05-20 22:55:39 +01:00
Kconfig ASoC: sirf: Add SiRF audio port driver is used by SiRF internal audio codec 2014-03-06 17:20:08 +08:00
Makefile ASoC: sirf: Add SiRF audio port driver is used by SiRF internal audio codec 2014-03-06 17:20:08 +08:00
soc-cache.c ASoC: cache: Fix error code when not using ASoC level cache 2014-06-02 16:08:21 +01:00
soc-compress.c ASoC: compress: Fix compress device direction check 2016-02-02 19:09:21 +00:00
soc-core.c ASoC: Fix use-after-free at card unregistration 2017-09-15 18:29:50 +01:00
soc-dapm.c ASoC: dapm: Fix value setting for _ENUM_DOUBLE MUX's second channel 2017-02-23 03:53:56 +00:00
soc-devres.c ASoC: Export devm_snd_soc_register_platform() 2014-04-22 22:00:42 +01:00
soc-generic-dmaengine-pcm.c ASoC: core: Fix possible NULL pointer dereference of pcm->config 2014-01-16 14:11:49 +00:00
soc-io.c ASoC: Remove ASoC level IO tracing 2014-04-22 13:24:24 +01:00
soc-jack.c ASoC: jack: Add support for GPIO descriptor defined jack pins 2014-05-26 15:26:00 +01:00
soc-pcm.c ASoC: dpcm: fix the BE state on hw_free 2016-02-25 00:18:42 +00:00
soc-utils.c Merge remote-tracking branch 'asoc/topic/dapm' into for-tiwai 2014-01-16 12:42:53 +00:00