Message ID | 1447075826-641-1-git-send-email-jsarha@ti.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon, Nov 09, 2015 at 03:30:26PM +0200, Jyri Sarha wrote: > If there is anything in damp->path_source_cache or > damp->path_sink_cache, it can not be valid after the widgets have been > freed. Without this patch a repeated remove and load of a machine > driver may cause NULL pointer reference in dapm_wcache_lookup() when a > freed widget, not belonging to any list, is haunting in the wcache. > > Signed-off-by: Jyri Sarha <jsarha@ti.com> > Reported-by: Felipe Balbi <balbi@ti.com> > --- Acked-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com> Thanks, Charles
On 11/09/2015 02:30 PM, Jyri Sarha wrote: [...] > diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c > index ff8bda4..d78db59 100644 > --- a/sound/soc/soc-dapm.c > +++ b/sound/soc/soc-dapm.c > @@ -2286,6 +2286,9 @@ static void dapm_free_widgets(struct snd_soc_dapm_context *dapm) > continue; > snd_soc_dapm_free_widget(w); > } > + > + dapm->path_sink_cache.widget = NULL; > + dapm->path_source_cache.widget = NULL; > } Looks good, but this is not the only place where we free widgets. Can you add a helper function snd_soc_dapm_reset_cache() (or similar) and then call this from dapm_free_widgets() as well as snd_soc_tplg_widget_remove_all(). - Lars
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index ff8bda4..d78db59 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c @@ -2286,6 +2286,9 @@ static void dapm_free_widgets(struct snd_soc_dapm_context *dapm) continue; snd_soc_dapm_free_widget(w); } + + dapm->path_sink_cache.widget = NULL; + dapm->path_source_cache.widget = NULL; } static struct snd_soc_dapm_widget *dapm_find_widget(
If there is anything in damp->path_source_cache or damp->path_sink_cache, it can not be valid after the widgets have been freed. Without this patch a repeated remove and load of a machine driver may cause NULL pointer reference in dapm_wcache_lookup() when a freed widget, not belonging to any list, is haunting in the wcache. Signed-off-by: Jyri Sarha <jsarha@ti.com> Reported-by: Felipe Balbi <balbi@ti.com> --- The patch fixes the problem reported here: http://mailman.alsa-project.org/pipermail/alsa-devel/2015-October/099431.html sound/soc/soc-dapm.c | 3 +++ 1 file changed, 3 insertions(+)