Patch "ASoC: topology: disable size checks for bytes_ext controls if needed" has been added to the 5.9-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    ASoC: topology: disable size checks for bytes_ext controls if needed

to the 5.9-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     asoc-topology-disable-size-checks-for-bytes_ext-cont.patch
and it can be found in the queue-5.9 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit db5032d7a16124dd87f4396a285490da2ffd6f5b
Author: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx>
Date:   Thu Sep 17 13:39:12 2020 +0300

    ASoC: topology: disable size checks for bytes_ext controls if needed
    
    [ Upstream commit 6788fc1a66a0c1d1cec7a0f84f94b517eae8611c ]
    
    When CONFIG_SND_CTL_VALIDATION is set, accesses to extended bytes
    control generate spurious error messages when the size exceeds 512
    bytes, such as
    
    [ 11.224223] sof_sdw sof_sdw: control 2:0:0:EQIIR5.0 eqiir_coef_5:0:
    invalid count 1024
    
    In addition the error check returns -EINVAL which has the nasty side
    effect of preventing applications accessing controls from working,
    e.g.
    
    root@plb:~# alsamixer
    cannot load mixer controls: Invalid argument
    
    It's agreed that the control interface has been abused since 2014, but
    forcing a check should not prevent existing solutions from working.
    
    This patch skips the checks conditionally if CONFIG_SND_CTL_VALIDATION
    is set and the byte array provided by topology is > 512. This
    preserves the checks for all other cases.
    
    Fixes: 1a3232d2f61d2 ('ASoC: topology: Add support for TLV bytes controls')
    BugLink: https://github.com/thesofproject/linux/issues/2430
    Reported-by: Takashi Iwai <tiwai@xxxxxxx>
    Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx>
    Reviewed-by: Ranjani Sridharan <ranjani.sridharan@xxxxxxxxxxxxxxx>
    Reviewed-by: Bard Liao <yung-chuan.liao@xxxxxxxxxxxxxxx>
    Reviewed-by: Jaska Uimonen <jaska.uimonen@xxxxxxxxx>
    Signed-off-by: Kai Vehmanen <kai.vehmanen@xxxxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20200917103912.2565907-1-kai.vehmanen@xxxxxxxxxxxxxxx
    Signed-off-by: Mark Brown <broonie@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c
index 5b60379237bff..d1e7dbb9fea36 100644
--- a/sound/soc/soc-topology.c
+++ b/sound/soc/soc-topology.c
@@ -592,6 +592,17 @@ static int soc_tplg_kcontrol_bind_io(struct snd_soc_tplg_ctl_hdr *hdr,
 		k->info = snd_soc_bytes_info_ext;
 		k->tlv.c = snd_soc_bytes_tlv_callback;
 
+		/*
+		 * When a topology-based implementation abuses the
+		 * control interface and uses bytes_ext controls of
+		 * more than 512 bytes, we need to disable the size
+		 * checks, otherwise accesses to such controls will
+		 * return an -EINVAL error and prevent the card from
+		 * being configured.
+		 */
+		if (IS_ENABLED(CONFIG_SND_CTL_VALIDATION) && sbe->max > 512)
+			k->access |= SNDRV_CTL_ELEM_ACCESS_SKIP_CHECK;
+
 		ext_ops = tplg->bytes_ext_ops;
 		num_ops = tplg->bytes_ext_ops_count;
 		for (i = 0; i < num_ops; i++) {



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux