Re: [PATCH 2/2] ASoC: codecs: lpass-wsa-macro: Fix enum kcontrol accesses
Srinivas Kandagatla <[email protected]>
| Newsgroups | gmane.linux.sound,gmane.linux.ports.arm.msm,gmane.linux.kernel |
|---|---|
| Message-ID | <[email protected]> |
On 7/29/26 8:38 PM, Dawid Wróbel via B4 Relay wrote: > From: Dawid Wróbel <[email protected]> > > The "EAR SPKR PA Gain" control is enumerated, but > wsa_macro_ear_spkr_pa_gain_get() and _put() access its value > through ucontrol->value.integer.value[0] (a long) instead of > ucontrol->value.enumerated.item[0] (an unsigned int). > > This same pattern was fixed in the sibling drivers by > commit bcfe5f76cc40 ("ASoC: codecs: rx-macro: fix accessing array > out of bounds for enum type") and > commit 0ea5eff7c606 ("ASoC: codecs: va-macro: fix accessing array > out of bounds for enum type"), but wsa-macro was missed. > > On 64-bit kernels built with CONFIG_SND_CTL_DEBUG, the elem value > sanity check catches the 4 bytes written past the enumerated item > and every read of this control fails with -EINVAL (access overflow). > > Fixes: 809bcbcecebf ("ASoC: codecs: lpass-wsa-macro: Add support to WSA Macro") > Assisted-by: Claude:claude-fable-5 > Signed-off-by: Dawid Wróbel <[email protected]> > --- > sound/soc/codecs/lpass-wsa-macro.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > Thanks for fixing these, while you are at it , can you also fix wsa_macro_rx_mux_put too, it seems to suffer the same issue. Also can you add CC Stable. --srini > diff --git a/sound/soc/codecs/lpass-wsa-macro.c b/sound/soc/codecs/lpass-wsa-macro.c > index 5ad0448af649..c88d13c0770b 100644 > --- a/sound/soc/codecs/lpass-wsa-macro.c > +++ b/sound/soc/codecs/lpass-wsa-macro.c > @@ -2064,7 +2064,7 @@ static int wsa_macro_ear_spkr_pa_gain_get(struct snd_kcontrol *kcontrol, > struct snd_soc_component *component = snd_kcontrol_chip(kcontrol); > struct wsa_macro *wsa = snd_soc_component_get_drvdata(component); > > - ucontrol->value.integer.value[0] = wsa->ear_spkr_gain; > + ucontrol->value.enumerated.item[0] = wsa->ear_spkr_gain; > > return 0; > } > @@ -2075,7 +2075,7 @@ static int wsa_macro_ear_spkr_pa_gain_put(struct snd_kcontrol *kcontrol, > struct snd_soc_component *component = snd_kcontrol_chip(kcontrol); > struct wsa_macro *wsa = snd_soc_component_get_drvdata(component); > > - wsa->ear_spkr_gain = ucontrol->value.integer.value[0]; > + wsa->ear_spkr_gain = ucontrol->value.enumerated.item[0]; > > return 0; > } >