lkml.org 
[lkml]   [2021]   [Jan]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 01/43] ASoC: dapm: remove widget from dirty list on free
    Date
    From: Thomas Hebb <tommyhebb@gmail.com>

    commit 5c6679b5cb120f07652418524ab186ac47680b49 upstream.

    A widget's "dirty" list_head, much like its "list" list_head, eventually
    chains back to a list_head on the snd_soc_card itself. This means that
    the list can stick around even after the widget (or all widgets) have
    been freed. Currently, however, widgets that are in the dirty list when
    freed remain there, corrupting the entire list and leading to memory
    errors and undefined behavior when the list is next accessed or
    modified.

    I encountered this issue when a component failed to probe relatively
    late in snd_soc_bind_card(), causing it to bail out and call
    soc_cleanup_card_resources(), which eventually called
    snd_soc_dapm_free() with widgets that were still dirty from when they'd
    been added.

    Fixes: db432b414e20 ("ASoC: Do DAPM power checks only for widgets changed since last run")
    Cc: stable@vger.kernel.org
    Signed-off-by: Thomas Hebb <tommyhebb@gmail.com>
    Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
    Link: https://lore.kernel.org/r/f8b5f031d50122bf1a9bfc9cae046badf4a7a31a.1607822410.git.tommyhebb@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    sound/soc/soc-dapm.c | 1 +
    1 file changed, 1 insertion(+)

    --- a/sound/soc/soc-dapm.c
    +++ b/sound/soc/soc-dapm.c
    @@ -2454,6 +2454,7 @@ void snd_soc_dapm_free_widget(struct snd
    enum snd_soc_dapm_direction dir;

    list_del(&w->list);
    + list_del(&w->dirty);
    /*
    * remove source and sink paths associated to this widget.
    * While removing the path, remove reference to it from both

    \
     
     \ /
      Last update: 2021-01-18 21:07    [W:4.045 / U:0.568 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site