From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Tzung-Bi Shih <tzungbi@google.com>,
Mark Brown <broonie@kernel.org>, Sasha Levin <sashal@kernel.org>
Subject: [PATCH AUTOSEL 5.1 31/51] ASoC: core: move DAI pre-links initiation to snd_soc_instantiate_card
Date: Tue, 25 Jun 2019 23:40:47 -0400 [thread overview]
Message-ID: <20190626034117.23247-31-sashal@kernel.org> (raw)
In-Reply-To: <20190626034117.23247-1-sashal@kernel.org>
From: Tzung-Bi Shih <tzungbi@google.com>
[ Upstream commit 70fc53734e71ce51f46dfcfd1a1c319e1cfe080c ]
Kernel crashes when an ASoC component rebinding.
The dai_link->platforms has been reset to NULL by soc_cleanup_platform()
in soc_cleanup_card_resources() when un-registering component. However,
it has no chance to re-allocate the dai_link->platforms when registering
the component again.
Move the DAI pre-links initiation from snd_soc_register_card() to
snd_soc_instantiate_card() to make sure all DAI pre-links get initiated
when component rebinding.
As an example, by using the following commands:
- echo -n max98357a > /sys/bus/platform/drivers/max98357a/unbind
- echo -n max98357a > /sys/bus/platform/drivers/max98357a/bind
Got the error message:
"Unable to handle kernel NULL pointer dereference at virtual address".
The call trace:
snd_soc_is_matching_component+0x30/0x6c
soc_bind_dai_link+0x16c/0x240
snd_soc_bind_card+0x1e4/0xb10
snd_soc_add_component+0x270/0x300
snd_soc_register_component+0x54/0x6c
Signed-off-by: Tzung-Bi Shih <tzungbi@google.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
sound/soc/soc-core.c | 27 ++++++++++-----------------
1 file changed, 10 insertions(+), 17 deletions(-)
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index a4668a788ed5..9df3bdeb5c47 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -2069,6 +2069,16 @@ static int snd_soc_instantiate_card(struct snd_soc_card *card)
int ret, i, order;
mutex_lock(&client_mutex);
+ for_each_card_prelinks(card, i, dai_link) {
+ ret = soc_init_dai_link(card, dai_link);
+ if (ret) {
+ soc_cleanup_platform(card);
+ dev_err(card->dev, "ASoC: failed to init link %s: %d\n",
+ dai_link->name, ret);
+ mutex_unlock(&client_mutex);
+ return ret;
+ }
+ }
mutex_lock_nested(&card->mutex, SND_SOC_CARD_CLASS_INIT);
card->dapm.bias_level = SND_SOC_BIAS_OFF;
@@ -2793,26 +2803,9 @@ static int snd_soc_bind_card(struct snd_soc_card *card)
*/
int snd_soc_register_card(struct snd_soc_card *card)
{
- int i, ret;
- struct snd_soc_dai_link *link;
-
if (!card->name || !card->dev)
return -EINVAL;
- mutex_lock(&client_mutex);
- for_each_card_prelinks(card, i, link) {
-
- ret = soc_init_dai_link(card, link);
- if (ret) {
- soc_cleanup_platform(card);
- dev_err(card->dev, "ASoC: failed to init link %s\n",
- link->name);
- mutex_unlock(&client_mutex);
- return ret;
- }
- }
- mutex_unlock(&client_mutex);
-
dev_set_drvdata(card->dev, card);
snd_soc_initialize_card_lists(card);
--
2.20.1
next prev parent reply other threads:[~2019-06-26 3:42 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-26 3:40 [PATCH AUTOSEL 5.1 01/51] HID: i2c-hid: add iBall Aer3 to descriptor override Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 02/51] ASoC : cs4265 : readable register too low Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 03/51] ASoC: ak4458: add return value for ak4458_probe Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 04/51] ASoC: soc-pcm: BE dai needs prepare when pause release after resume Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 05/51] ASoC: ak4458: rstn_control - return a non-zero on error only Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 06/51] spi: bitbang: Fix NULL pointer dereference in spi_unregister_master Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 07/51] ASoC: soc-dpm: fixup DAI active unbalance Sasha Levin
2019-06-26 10:03 ` Mark Brown
2019-06-27 0:20 ` Sasha Levin
2019-07-01 16:18 ` Mark Brown
2019-07-03 14:16 ` Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 08/51] ASoC: core: lock client_mutex while removing link components Sasha Levin
2019-06-26 10:37 ` Mark Brown
2019-06-27 0:24 ` Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 09/51] iommu/vt-d: Fix lock inversion between iommu->lock and device_domain_lock Sasha Levin
2019-06-26 6:56 ` Joerg Roedel
2019-06-27 0:27 ` Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 10/51] iommu/vt-d: Set the right field for Page Walk Snoop Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 11/51] ASoC: sun4i-codec: fix first delay on Speaker Sasha Levin
2019-06-26 10:37 ` Mark Brown
2019-07-03 14:20 ` Sasha Levin
2019-07-03 17:07 ` Mark Brown
2019-07-03 18:10 ` Sasha Levin
2019-07-03 20:08 ` Mark Brown
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 12/51] HID: a4tech: fix horizontal scrolling Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 13/51] ASoC: Intel: Baytrail: add quirk for Aegex 10 (RU2) tablet Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 14/51] ASoC: hda: fix unbalanced codec dev refcount for HDA_DEV_ASOC Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 15/51] drm/mediatek: fix unbind functions Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 16/51] drm/mediatek: unbind components in mtk_drm_unbind() Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 17/51] drm/mediatek: call drm_atomic_helper_shutdown() when unbinding driver Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 18/51] drm/mediatek: clear num_pipes when unbind driver Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 19/51] drm/mediatek: call mtk_dsi_stop() after mtk_drm_crtc_atomic_disable() Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 20/51] ASoC: max98090: remove 24-bit format support if RJ is 0 Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 21/51] ASoC: sun4i-i2s: Fix sun8i tx channel offset mask Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 22/51] ASoC: sun4i-i2s: Add offset to RX channel select Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 23/51] x86/CPU: Add more Icelake model numbers Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 24/51] usb: gadget: fusb300_udc: Fix memory leak of fusb300->ep[i] Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 25/51] usb: gadget: udc: lpc32xx: allocate descriptor with GFP_ATOMIC Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 26/51] usb: gadget: dwc2: fix zlp handling Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 27/51] ASoC: Intel: cht_bsw_max98090: fix kernel oops with platform_name override Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 28/51] ASoC: Intel: bytcht_es8316: " Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 29/51] ASoC: Intel: cht_bsw_nau8824: " Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 30/51] ASoC: Intel: cht_bsw_rt5672: " Sasha Levin
2019-06-26 3:40 ` Sasha Levin [this message]
2019-06-26 10:38 ` [PATCH AUTOSEL 5.1 31/51] ASoC: core: move DAI pre-links initiation to snd_soc_instantiate_card Mark Brown
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 32/51] ALSA: hdac: fix memory release for SST and SOF drivers Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 33/51] SoC: rt274: Fix internal jack assignment in set_jack callback Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 34/51] scsi: hpsa: correct ioaccel2 chaining Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 35/51] gpio: pca953x: hack to fix 24 bit gpio expanders Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 36/51] drm: panel-orientation-quirks: Add quirk for GPD pocket2 Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 37/51] drm: panel-orientation-quirks: Add quirk for GPD MicroPC Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 38/51] ASoC: core: Fix deadlock in snd_soc_instantiate_card() Sasha Levin
2019-06-26 10:39 ` Mark Brown
2019-06-27 0:24 ` Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 39/51] ASoC: Intel: sst: fix kmalloc call with wrong flags Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 40/51] platform/x86: asus-wmi: Only Tell EC the OS will handle display hotkeys from asus_nb_wmi Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 41/51] platform/x86: intel-vbtn: Report switch events when event wakes device Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 42/51] platform/x86: mlx-platform: Fix parent device in i2c-mux-reg device registration Sasha Levin
2019-06-26 3:40 ` [PATCH AUTOSEL 5.1 43/51] platform/mellanox: mlxreg-hotplug: Add devm_free_irq call to remove flow Sasha Levin
2019-06-26 3:41 ` [PATCH AUTOSEL 5.1 44/51] i2c: pca-platform: Fix GPIO lookup code Sasha Levin
2019-06-26 3:41 ` [PATCH AUTOSEL 5.1 45/51] arm64: tlbflush: Ensure start/end of address range are aligned to stride Sasha Levin
2019-06-26 3:41 ` [PATCH AUTOSEL 5.1 46/51] cpuset: restore sanity to cpuset_cpus_allowed_fallback() Sasha Levin
2019-06-26 3:41 ` [PATCH AUTOSEL 5.1 47/51] scripts/decode_stacktrace.sh: prefix addr2line with $CROSS_COMPILE Sasha Levin
2019-06-26 3:41 ` [PATCH AUTOSEL 5.1 48/51] mm/mlock.c: change count_mm_mlocked_page_nr return type Sasha Levin
2019-06-26 3:41 ` [PATCH AUTOSEL 5.1 49/51] tracing: avoid build warning with HAVE_NOP_MCOUNT Sasha Levin
2019-06-26 3:41 ` [PATCH AUTOSEL 5.1 50/51] module: Fix livepatch/ftrace module text permissions race Sasha Levin
2019-06-26 3:41 ` [PATCH AUTOSEL 5.1 51/51] ftrace: Fix NULL pointer dereference in free_ftrace_func_mapper() 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=20190626034117.23247-31-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=broonie@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=tzungbi@google.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox