All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: "Amadeusz Sławiński" <amadeuszx.slawinski@linux.intel.com>,
	"Cezary Rojewski" <cezary.rojewski@intel.com>,
	"Mark Brown" <broonie@kernel.org>,
	"Sasha Levin" <sashal@kernel.org>,
	lgirdwood@gmail.com, perex@perex.cz, tiwai@suse.com,
	alsa-devel@alsa-project.org
Subject: [PATCH AUTOSEL 6.5 08/31] ASoC: core: Do not call link_exit() on uninitialized rtd objects
Date: Wed, 18 Oct 2023 10:11:25 -0400	[thread overview]
Message-ID: <20231018141151.1334501-8-sashal@kernel.org> (raw)
In-Reply-To: <20231018141151.1334501-1-sashal@kernel.org>

From: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>

[ Upstream commit dd9f9cc1e6b9391140afa5cf27bb47c9e2a08d02 ]

On init we have sequence:

	for_each_card_prelinks(card, i, dai_link) {
		ret = snd_soc_add_pcm_runtime(card, dai_link);

	ret = init_some_other_things(...);
	if (ret)
		goto probe_end:

	for_each_card_rtds(card, rtd) {
		ret = soc_init_pcm_runtime(card, rtd);

probe_end:

while on exit:
	for_each_card_rtds(card, rtd)
		snd_soc_link_exit(rtd);

If init_some_other_things() step fails due to error we end up with
not fully setup rtds and try to call snd_soc_link_exit on them, which
depending on contents on .link_exit handler, can end up dereferencing
NULL pointer.

Reviewed-by: Cezary Rojewski <cezary.rojewski@intel.com>
Signed-off-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
Link: https://lore.kernel.org/r/20230929103243.705433-2-amadeuszx.slawinski@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 include/sound/soc.h  |  2 ++
 sound/soc/soc-core.c | 20 +++++++++++++++-----
 2 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/include/sound/soc.h b/include/sound/soc.h
index b27f84580c5b0..cf34810882347 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -1125,6 +1125,8 @@ struct snd_soc_pcm_runtime {
 	unsigned int pop_wait:1;
 	unsigned int fe_compr:1; /* for Dynamic PCM */
 
+	bool initialized;
+
 	int num_components;
 	struct snd_soc_component *components[]; /* CPU/Codec/Platform */
 };
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 1a0bde23f5e6f..2d85164457f73 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -1259,7 +1259,7 @@ static int soc_init_pcm_runtime(struct snd_soc_card *card,
 	snd_soc_runtime_get_dai_fmt(rtd);
 	ret = snd_soc_runtime_set_dai_fmt(rtd, dai_link->dai_fmt);
 	if (ret)
-		return ret;
+		goto err;
 
 	/* add DPCM sysfs entries */
 	soc_dpcm_debugfs_add(rtd);
@@ -1284,17 +1284,26 @@ static int soc_init_pcm_runtime(struct snd_soc_card *card,
 	/* create compress_device if possible */
 	ret = snd_soc_dai_compress_new(cpu_dai, rtd, num);
 	if (ret != -ENOTSUPP)
-		return ret;
+		goto err;
 
 	/* create the pcm */
 	ret = soc_new_pcm(rtd, num);
 	if (ret < 0) {
 		dev_err(card->dev, "ASoC: can't create pcm %s :%d\n",
 			dai_link->stream_name, ret);
-		return ret;
+		goto err;
 	}
 
-	return snd_soc_pcm_dai_new(rtd);
+	ret = snd_soc_pcm_dai_new(rtd);
+	if (ret < 0)
+		goto err;
+
+	rtd->initialized = true;
+
+	return 0;
+err:
+	snd_soc_link_exit(rtd);
+	return ret;
 }
 
 static void soc_set_name_prefix(struct snd_soc_card *card,
@@ -1892,7 +1901,8 @@ static void soc_cleanup_card_resources(struct snd_soc_card *card)
 
 	/* release machine specific resources */
 	for_each_card_rtds(card, rtd)
-		snd_soc_link_exit(rtd);
+		if (rtd->initialized)
+			snd_soc_link_exit(rtd);
 	/* remove and free each DAI */
 	soc_remove_link_dais(card);
 	soc_remove_link_components(card);
-- 
2.40.1


  parent reply	other threads:[~2023-10-18 14:14 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-18 14:11 [PATCH AUTOSEL 6.5 01/31] Input: xpad - add HyperX Clutch Gladiate Support Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 02/31] ASoC: Intel: soc-acpi: Add entry for sof_es8336 in MTL match table Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 03/31] ASoC: Intel: sof_sdw: add support for SKU 0B14 Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 04/31] ASoC: simple-card: fixup asoc_simple_probe() error handling Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 05/31] coresight: tmc-etr: Disable warnings for allocation failures Sasha Levin
2023-10-18 14:11   ` Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 06/31] ACPI: EC: Add quirk for the HP Pavilion Gaming 15-dk1xxx Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 07/31] ASoC: fsl-asoc-card: use integer type for fll_id and pll_id Sasha Levin
2023-10-18 14:11   ` Sasha Levin
2023-10-18 14:11 ` Sasha Levin [this message]
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 09/31] ASoC: tlv320adc3xxx: BUG: Correct micbias setting Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 10/31] Input: i8042 - add Fujitsu Lifebook E5411 to i8042 quirk table Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 11/31] Input: goodix - ensure int GPIO is in input for gpio_count == 1 && gpio_int_idx == 0 case Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 12/31] workqueue: Fix UAF report by KASAN in pwq_release_workfn() Sasha Levin
2023-10-22  2:52   ` Z qiang
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 13/31] ALSA: usb-audio: Fix microphone sound on Opencomm2 Headset Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 14/31] net: sched: cls_u32: Fix allocation size in u32_init() Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 15/31] arm64: dts: imx93: add the Flex-CAN stop mode by GPR Sasha Levin
2023-10-18 14:11   ` Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 16/31] can: flexcan: remove the auto stop mode for IMX93 Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 17/31] irqchip/gic-v3-its: Split allocation from initialisation of its_node Sasha Levin
2023-10-18 14:11   ` Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 18/31] irqchip/gic-v3: Enable non-coherent redistributors/ITSes DT probing Sasha Levin
2023-10-18 14:11   ` Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 19/31] irqchip/riscv-intc: Mark all INTC nodes as initialized Sasha Levin
2023-10-18 14:11   ` Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 20/31] irqchip/stm32-exti: add missing DT IRQ flag translation Sasha Levin
2023-10-18 14:11   ` Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 21/31] dmaengine: ste_dma40: Fix PM disable depth imbalance in d40_probe Sasha Levin
2023-10-18 14:11   ` Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 22/31] ALSA: usb-audio: Fix microphone sound on Nexigo webcam Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 23/31] ACPI: resource: Add TongFang GM6BGEQ, GM6BG5Q and GM6BG0Q to irq1_edge_low_force_override[] Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 24/31] ata: pata_parport: add custom version of wait_after_reset Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 25/31] ata: pata_parport: fit3: implement IDE command set registers Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 26/31] net: macsec: indicate next pn update when offloading Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 27/31] powerpc/85xx: Fix math emulation exception Sasha Levin
2023-10-18 14:11   ` Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 28/31] media: i2c: ov8858: Don't set fwnode in the driver Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 29/31] Input: synaptics-rmi4 - handle reset delay when using SMBus trsnsport Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 30/31] Input: xpad - add PXN V900 support Sasha Levin
2023-10-18 14:11 ` [PATCH AUTOSEL 6.5 31/31] Input: powermate - fix use-after-free in powermate_config_complete Sasha Levin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231018141151.1334501-8-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=alsa-devel@alsa-project.org \
    --cc=amadeuszx.slawinski@linux.intel.com \
    --cc=broonie@kernel.org \
    --cc=cezary.rojewski@intel.com \
    --cc=lgirdwood@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=perex@perex.cz \
    --cc=stable@vger.kernel.org \
    --cc=tiwai@suse.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.