From: sashiko-bot@kernel.org
To: "Amadeusz Sławiński" <amade@asmblr.net>, linux-sound@vger.kernel.org
Subject: Re: [PATCH 03/12] ASoC: codecs: wm8994: Implement set_jack callback
Date: Mon, 26 Oct 2026 20:34:59 +0000 [thread overview]
Message-ID: <sashiko-outbox-185729@kernel.org> (raw)
In-Reply-To: <20261026201915.57184-4-amade@asmblr.net>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] ASoC: wm8994: stale jack pointer and active work in wm8958_mic_detect()
--
commit 0dc23f1f04114660da148a373855c1151a4983df
Author: Amadeusz Sławiński <amade@asmblr.net>
ASoC: codecs: wm8994: Implement set_jack callback
This commit implements the set_jack callback for the wm8994 component driver,
delegating to wm8994_mic_detect() for WM8994 and wm8958_mic_detect() for
WM1811 and WM8958 so machine drivers can use snd_soc_component_set_jack().
> diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
> index 6b91e02f130b3..69afba1764eb7 100644
> --- a/sound/soc/codecs/wm8994.c
> +++ b/sound/soc/codecs/wm8994.c
> @@ -4642,12 +4642,30 @@ static void wm8994_component_remove(struct snd_soc_component *component)
> kfree(wm8994->retune_mobile_texts);
> }
>
> +static int wm8994_set_jack(struct snd_soc_component *component,
> + struct snd_soc_jack *jack, void *data)
> +{
> + struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
> + struct wm8994 *control = wm8994->wm8994;
> +
> + switch (control->type) {
> + case WM8994:
> + return wm8994_mic_detect(component, jack, data ? *(int *)data : 1);
> + case WM1811:
> + case WM8958:
> + return wm8958_mic_detect(component, jack, NULL, NULL, NULL, NULL);
[Severity: High]
When snd_soc_component_set_jack(component, NULL, NULL) is called during jack
teardown or card unbind on WM1811 or WM8958, wm8994_set_jack() passes a NULL
jack pointer to wm8958_mic_detect().
In sound/soc/codecs/wm8994.c, the NULL jack branch of wm8958_mic_detect()
does not clear wm8994->micdet[0].jack or cancel pending delayed work:
} else {
snd_soc_component_update_bits(component, WM8958_MIC_DETECT_1,
WM8958_MICD_ENA, 0);
wm1811_jackdet_set_mode(component, WM1811_JACKDET_MODE_NONE);
snd_soc_dapm_disable_pin(dapm, "CLK_SYS");
snd_soc_dapm_sync(dapm);
}
Because wm8994->micdet[0].jack remains non-NULL, wm1811_jackdet_set_mode()
still treats jack detection as active:
if (!wm8994->jackdet || !wm8994->micdet[0].jack)
return;
if (wm8994->active_refcount)
mode = WM1811_JACKDET_MODE_AUDIO;
If wm8994->active_refcount is non-zero during teardown,
wm1811_jackdet_set_mode() overrides WM1811_JACKDET_MODE_NONE with
WM1811_JACKDET_MODE_AUDIO, and subsequent active_dereference() calls re-arm
hardware jack or microphone detection.
In addition, pending delayed work items such as wm8958_open_circuit_work,
wm1811_jackdet_bootstrap, wm1811_mic_work, and wm8958_mic_work are not
canceled and can still dereference the stale wm8994->micdet[0].jack pointer:
snd_soc_jack_report(wm8994->micdet[0].jack, 0,
wm8994->btn_mask |
SND_JACK_HEADSET);
Can this leave a dangling jack pointer and cause a use-after-free in
snd_soc_jack_report() after the jack is freed?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261026201915.57184-1-amade@asmblr.net?part=3
next prev parent reply other threads:[~2026-10-26 20:34 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-26 20:19 [PATCH 00/12] ASoC: Convert last few codecs to set_jack Amadeusz Sławiński
2026-10-26 20:19 ` [PATCH 01/12] ASoC: codecs: wm8903: Implement set_jack callback Amadeusz Sławiński
2026-10-26 20:19 ` [PATCH 02/12] ASoC: codecs: wm8962: " Amadeusz Sławiński
2026-10-26 20:19 ` [PATCH 03/12] ASoC: codecs: wm8994: " Amadeusz Sławiński
2026-10-26 20:34 ` sashiko-bot [this message]
2026-10-27 19:23 ` Amadeusz Sławiński
2026-10-26 20:19 ` [PATCH 04/12] ASoC: tegra: tegra_wm8903: Use standard callback to set jack Amadeusz Sławiński
2026-10-26 20:19 ` [PATCH 05/12] ASoC: tegra: tegra_wm8962: " Amadeusz Sławiński
2026-10-26 20:19 ` [PATCH 06/12] ASoC: tegra: tegra_wm8994: " Amadeusz Sławiński
2026-10-26 20:19 ` [PATCH 07/12] ASoC: samsung: littlemill: " Amadeusz Sławiński
2026-10-26 20:19 ` [PATCH 08/12] ASoC: samsung: midas_wm1811: " Amadeusz Sławiński
2026-10-26 20:19 ` [PATCH 09/12] ASoC: samsung: tobermory: " Amadeusz Sławiński
2026-10-26 20:19 ` [PATCH 10/12] ASoC: codecs: wm8903: Make wm8903_mic_detect() static Amadeusz Sławiński
2026-10-26 20:19 ` [PATCH 11/12] ASoC: codecs: wm8962: Make wm8962_mic_detect() static Amadeusz Sławiński
2026-10-26 20:19 ` [PATCH 12/12] ASoC: codecs: wm8994: Make mic detect functions static Amadeusz Sławiński
2026-10-27 10:04 ` [PATCH 00/12] ASoC: Convert last few codecs to set_jack Charles Keepax
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=sashiko-outbox-185729@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=amade@asmblr.net \
--cc=linux-sound@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/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.