mirror of
https://github.com/torvalds/linux.git
synced 2026-09-27 11:02:03 +02:00
ASoC: tas2562: Validate values for volume writes
tas2562_volume_control_put() does not do any validation of the control value written by userspace, it uses it to look up a value in a fixed size array which can easily be overflowed and then writes whatever value it gets back to the device. Add validation that we are loading a value we have in the array. Cc: stable@vger.kernel.org Reviewed-by: Cezary Rojewski <cezary.rojewski@intel.com> Link: https://patch.msgid.link/20260715-asoc-tas2562-put-retval-v1-1-97bf467c924e@kernel.org Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
1590cf0329
commit
8fb41964f7
|
|
@ -471,10 +471,14 @@ static int tas2562_volume_control_put(struct snd_kcontrol *kcontrol,
|
|||
{
|
||||
struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
|
||||
struct tas2562_data *tas2562 = snd_soc_component_get_drvdata(component);
|
||||
int ret;
|
||||
int ret, index;
|
||||
u32 reg_val;
|
||||
|
||||
reg_val = float_vol_db_lookup[ucontrol->value.integer.value[0]/2];
|
||||
index = ucontrol->value.integer.value[0] / 2;
|
||||
if (index < 0 || index >= ARRAY_SIZE(float_vol_db_lookup))
|
||||
return -EINVAL;
|
||||
|
||||
reg_val = float_vol_db_lookup[index];
|
||||
ret = snd_soc_component_write(component, TAS2562_DVC_CFG4,
|
||||
(reg_val & 0xff));
|
||||
if (ret)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user