From: Alexander Stein <alexander.stein@ew.tq-group.com>
To: Mark Brown <broonie@kernel.org>,
Liam Girdwood <lgirdwood@gmail.com>,
linux-sound@vger.kernel.org
Cc: Emanuele Ghidoli <emanuele.ghidoli@toradex.com>,
Kees Cook <kees@kernel.org>,
"Gustavo A. R. Silva" <gustavoars@kernel.org>,
Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
linux-sound@vger.kernel.org, linux-hardening@vger.kernel.org,
linux-kernel@vger.kernel.org,
Emanuele Ghidoli <ghidoliemanuele@gmail.com>
Subject: Re: [PATCH] ASoC: soc-core: reset rtd->num_components after allocation
Date: Wed, 11 Nov 2026 11:06:02 +0100 [thread overview]
Message-ID: <4024352.mvXUDI8C0e@steina-w> (raw)
In-Reply-To: <20261109102536.357134-1-ghidoliemanuele@gmail.com>
Hi,
thanks for the patch.
Am Montag, 9. November 2026, 11:25:20 Mitteleuropäische Normalzeit schrieb Emanuele Ghidoli:
> From: Emanuele Ghidoli <emanuele.ghidoli@toradex.com>
>
>
> Commit 4dd10fbbeb9c ("treewide: Convert devm_kmalloc() family to the
> devm_kmalloc_obj() family") switched the snd_soc_pcm_runtime allocation
> in soc_new_pcm_runtime() to devm_kzalloc_flex(). components[] is
> annotated with __counted_by(num_components), so when the compiler
> provides __builtin_counted_by_ref() the allocation now also sets
> rtd->num_components to the number of allocated slots.
>
> snd_soc_rtd_add_component() fills components[] one entry at a time and
> expects num_components to start at zero. Starting from the allocated
> size, for_each_rtd_components() stops at the first, still NULL, entry,
> so the runtime has no components: they are not probed, no controls or
> user-visible PCM devices are created and the card registers empty,
> without any error message. In addition, each added component is stored
> past the end of components[]. On the tested board these stores still
> land in the slack of the kmalloc bucket that devres rounds the
> allocation up to, so KASAN does not report them.
>
> Reset num_components after the allocation.
>
> Seen on a Colibri iMX7D (simple-audio-card, fsl-sai, sgtl5000): the card
> is listed in /proc/asound/cards, but /proc/asound/pcm is empty and
>
> amixer: Unable to find simple control 'Capture Mux',0
> aplay: main:850: audio open error: No such file or directory
>
> Tested on that board with v7.4-rc2 built with GCC 15.2 (first seen with
> GCC 16.2): the failure is there without this change; with it, playback,
> capture and the codec controls work again.
>
> The root cause analysis, this change and the testing were done with the
> help of an AI coding assistant (Claude Code, Claude Opus 5.5).
>
> Fixes: 4dd10fbbeb9c ("treewide: Convert devm_kmalloc() family to the devm_kmalloc_obj() family")
> Signed-off-by: Emanuele Ghidoli <emanuele.ghidoli@toradex.com>
This fixes TQMa8MPxL/MBa8MPxL as well which is also affected by commit
4dd10fbbeb9c ("treewide: Convert devm_kmalloc() family to the
devm_kmalloc_obj() family").
FWIW:
Tested-by: Alexander Stein <alexander.stein@ew.tq-group.com>
> ---
> 4dd10fbbeb9c only reached mainline in v7.4-rc2 (not in broonie/sound yet),
> so this is based on v7.4-rc2.
>
> The other devm_k[mz]alloc_flex() sites added by 4dd10fbbeb9c were checked
> too: none of them fills a __counted_by() counter one entry at a time, so
> this one looks like the only user hit by the preset counter.
>
> sound/soc/soc-core.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
> index 68b54e509b65..06a1d5718997 100644
> --- a/sound/soc/soc-core.c
> +++ b/sound/soc/soc-core.c
> @@ -387,6 +387,12 @@ static struct snd_soc_pcm_runtime *soc_new_pcm_runtime(
> device_unregister(dev);
> return NULL;
> }
> + /*
> + * devm_kzalloc_flex() presets the __counted_by() counter to the
> + * allocated size when the compiler has __builtin_counted_by_ref(),
> + * but snd_soc_rtd_add_component() expects it to start from zero.
> + */
> + rtd->num_components = 0;
>
> rtd->dev = dev;
> INIT_LIST_HEAD(&rtd->list);
>
> base-commit: 7475ea8b58616b33c04afb976cf0fbaad9dd63fb
>
--
TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
Amtsgericht München, HRB 105018
Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
http://www.tq-group.com/
next prev parent reply other threads:[~2026-11-11 10:06 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-09 10:25 [PATCH] ASoC: soc-core: reset rtd->num_components after allocation Emanuele Ghidoli
2026-11-09 11:07 ` Takashi Iwai
2026-11-10 11:47 ` Takashi Iwai
2026-11-11 5:50 ` Kees Cook
2026-11-11 5:59 ` Kees Cook
2026-11-11 10:28 ` Emanuele Ghidoli
2026-11-12 17:27 ` Kees Cook
2026-11-11 13:09 ` Mark Brown
2026-11-12 17:33 ` Kees Cook
2026-11-10 9:57 ` Jan Remes
2026-11-10 17:45 ` Mark Brown
2026-11-11 10:06 ` Alexander Stein [this message]
2026-11-11 12:26 ` Cosmin-Gabriel Tanislav
-- strict thread matches above, loose matches on Subject: below --
2026-11-10 22:01 Rujbin
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=4024352.mvXUDI8C0e@steina-w \
--to=alexander.stein@ew.tq-group.com \
--cc=broonie@kernel.org \
--cc=emanuele.ghidoli@toradex.com \
--cc=ghidoliemanuele@gmail.com \
--cc=gustavoars@kernel.org \
--cc=kees@kernel.org \
--cc=lgirdwood@gmail.com \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=perex@perex.cz \
--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.