lkml.org 
[lkml]   [2022]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.18 194/231] ASoC: wcd9335: Remove RX channel from old list before adding it to a new one
    Date
    From: Yassine Oudjana <y.oudjana@protonmail.com>

    [ Upstream commit be6dd72edb216f20fc80e426ece9fe9b8aabf033 ]

    Currently in slim_rx_mux_put, an RX channel gets added to a new list
    even if it is already in one. This can mess up links and make either
    it, the new list head, or both, get linked to the wrong entries.
    This can cause an entry to link to itself which in turn ends up
    making list_for_each_entry in other functions loop infinitely.
    To avoid issues, always remove the RX channel from any list it's in
    before adding it to a new list.

    Signed-off-by: Yassine Oudjana <y.oudjana@protonmail.com>
    Link: https://lore.kernel.org/r/20220606152226.149164-1-y.oudjana@protonmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    sound/soc/codecs/wcd9335.c | 5 ++++-
    1 file changed, 4 insertions(+), 1 deletion(-)

    diff --git a/sound/soc/codecs/wcd9335.c b/sound/soc/codecs/wcd9335.c
    index 1e60db4056ad..12be043ee9a3 100644
    --- a/sound/soc/codecs/wcd9335.c
    +++ b/sound/soc/codecs/wcd9335.c
    @@ -1289,9 +1289,12 @@ static int slim_rx_mux_put(struct snd_kcontrol *kc,

    wcd->rx_port_value[port_id] = ucontrol->value.enumerated.item[0];

    + /* Remove channel from any list it's in before adding it to a new one */
    + list_del_init(&wcd->rx_chs[port_id].list);
    +
    switch (wcd->rx_port_value[port_id]) {
    case 0:
    - list_del_init(&wcd->rx_chs[port_id].list);
    + /* Channel already removed from lists. Nothing to do here */
    break;
    case 1:
    list_add_tail(&wcd->rx_chs[port_id].list,
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-07-19 15:09    [W:5.134 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site