Re: [PATCH 4.9 34/48] ASoC: ops: Reject out of bounds values in snd_soc_put_volsw_sx()

Mark Brown
2022-06-04T10:54:53Z

[-- Attachment #1: Type: text/plain, Size: 1413 bytes --]

On Fri, Jun 03, 2022 at 12:28:09PM +0200, Mark Brown wrote:
> On Fri, Jun 03, 2022 at 12:06:13PM +0200, Pavel Machek wrote:
>
> > We are getting reports that this commit breaks audio on some
> > phones... and indeed it looks like "+ min" is missing in first condition:
>
> > https://github.com/baunilla/android_kernel_xiaomi_rosy/commit/969b9d366c1e9564e173aea325ec544dcd7804ff
>
> > val = ucontrol->value.integer.value[0];
> > -￼ if (mc->platform_max && val > mc->platform_max)
> > +￼ if (mc->platform_max && ((int)val + min) > mc->platform_max)
> > ￼ return -EINVAL;
>
> > What needs to be done to get this fixed?
>
> The downstream kernel platform_max configuration should really be
> using the user visible value, not a direct register value. Note
> that some of the Qualcomm vendor trees have modifictions to the
> semantics of some of the controls which cause issues, and partly
> due to this confusion there should be some fixes for their
> upstream drivers coming soon.

Actually potentially we want to revert the handling of
platform_max only. Do we know where these systems are getting
their platform_max values from (a machine driver or sometehing
else?)? Sadly these controls were not even self consistent so
it's not clear which behaviour to fix, though fortunately it's
all in the areas where the userspaces were out of spec trying to
use the behaviour.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]