* [PATCH] ALSA: hda: cs35l41: validate and free ACPI mute object
@ 2026-07-08 11:36 Guangshuo Li
2026-07-15 14:40 ` Takashi Iwai
0 siblings, 1 reply; 2+ messages in thread
From: Guangshuo Li @ 2026-07-08 11:36 UTC (permalink / raw)
To: David Rhodes, Richard Fitzgerald, Jaroslav Kysela, Takashi Iwai,
Stefan Binding, linux-sound, patches, linux-kernel
Cc: Guangshuo Li
cs35l41_get_acpi_mute_state() evaluates a _DSM method to get the ACPI
mute state and reads the first byte from the returned object.
However, the returned ACPI object is owned by the caller and is never
freed after use, so each successful query leaks the _DSM result object.
The code also assumes that the returned object is a buffer with at least
one byte. A malformed firmware response can return a different object
type or an empty buffer, and the direct ret->buffer.pointer dereference
can then access an invalid pointer.
Use the typed _DSM helper, validate that the returned buffer contains at
least one byte, and free the ACPI object after reading it.
Fixes: 447106e92a0c ("ALSA: hda: cs35l41: Support mute notifications for CS35L41 HDA")
Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com>
---
sound/hda/codecs/side-codecs/cs35l41_hda.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/sound/hda/codecs/side-codecs/cs35l41_hda.c b/sound/hda/codecs/side-codecs/cs35l41_hda.c
index 64a5bd895fd1..237059ef22f5 100644
--- a/sound/hda/codecs/side-codecs/cs35l41_hda.c
+++ b/sound/hda/codecs/side-codecs/cs35l41_hda.c
@@ -1434,10 +1434,19 @@ static int cs35l41_get_acpi_mute_state(struct cs35l41_hda *cs35l41, acpi_handle
guid_parse(CS35L41_UUID, &guid);
if (cs35l41_dsm_supported(handle, CS35L41_DSM_GET_MUTE)) {
- ret = acpi_evaluate_dsm(handle, &guid, 0, CS35L41_DSM_GET_MUTE, NULL);
+ ret = acpi_evaluate_dsm_typed(handle, &guid, 0,
+ CS35L41_DSM_GET_MUTE, NULL,
+ ACPI_TYPE_BUFFER);
+
if (!ret)
return -EINVAL;
+ if (!ret->buffer.length || !ret->buffer.pointer) {
+ ACPI_FREE(ret);
+ return -EINVAL;
+ }
+
mute = *ret->buffer.pointer;
+ ACPI_FREE(ret);
dev_dbg(cs35l41->dev, "CS35L41_DSM_GET_MUTE: %d\n", mute);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH] ALSA: hda: cs35l41: validate and free ACPI mute object
2026-07-08 11:36 [PATCH] ALSA: hda: cs35l41: validate and free ACPI mute object Guangshuo Li
@ 2026-07-15 14:40 ` Takashi Iwai
0 siblings, 0 replies; 2+ messages in thread
From: Takashi Iwai @ 2026-07-15 14:40 UTC (permalink / raw)
To: Guangshuo Li
Cc: David Rhodes, Richard Fitzgerald, Jaroslav Kysela, Takashi Iwai,
Stefan Binding, linux-sound, patches, linux-kernel
On Wed, 08 Jul 2026 13:36:25 +0200,
Guangshuo Li wrote:
>
> cs35l41_get_acpi_mute_state() evaluates a _DSM method to get the ACPI
> mute state and reads the first byte from the returned object.
>
> However, the returned ACPI object is owned by the caller and is never
> freed after use, so each successful query leaks the _DSM result object.
>
> The code also assumes that the returned object is a buffer with at least
> one byte. A malformed firmware response can return a different object
> type or an empty buffer, and the direct ret->buffer.pointer dereference
> can then access an invalid pointer.
>
> Use the typed _DSM helper, validate that the returned buffer contains at
> least one byte, and free the ACPI object after reading it.
>
> Fixes: 447106e92a0c ("ALSA: hda: cs35l41: Support mute notifications for CS35L41 HDA")
> Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com>
Applied now. Thanks.
Takashi
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-07-15 14:40 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-08 11:36 [PATCH] ALSA: hda: cs35l41: validate and free ACPI mute object Guangshuo Li
2026-07-15 14:40 ` Takashi Iwai
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox