| From foo@baz Sun Jun 17 12:07:33 CEST 2018 |
| From: Liam Girdwood <liam.r.girdwood@linux.intel.com> |
| Date: Tue, 27 Mar 2018 14:30:44 +0100 |
| Subject: ASoC: topology: Check widget kcontrols before deref. |
| |
| From: Liam Girdwood <liam.r.girdwood@linux.intel.com> |
| |
| [ Upstream commit 05bdcf12905533b8628627b6634608cd3b57c607 ] |
| |
| Validate the topology input before we dereference the pointer. |
| |
| Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| sound/soc/soc-topology.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/sound/soc/soc-topology.c |
| +++ b/sound/soc/soc-topology.c |
| @@ -510,7 +510,7 @@ static void remove_widget(struct snd_soc |
| */ |
| if (dobj->widget.kcontrol_type == SND_SOC_TPLG_TYPE_ENUM) { |
| /* enumerated widget mixer */ |
| - for (i = 0; i < w->num_kcontrols; i++) { |
| + for (i = 0; w->kcontrols != NULL && i < w->num_kcontrols; i++) { |
| struct snd_kcontrol *kcontrol = w->kcontrols[i]; |
| struct soc_enum *se = |
| (struct soc_enum *)kcontrol->private_value; |
| @@ -528,7 +528,7 @@ static void remove_widget(struct snd_soc |
| kfree(w->kcontrol_news); |
| } else { |
| /* volume mixer or bytes controls */ |
| - for (i = 0; i < w->num_kcontrols; i++) { |
| + for (i = 0; w->kcontrols != NULL && i < w->num_kcontrols; i++) { |
| struct snd_kcontrol *kcontrol = w->kcontrols[i]; |
| |
| if (dobj->widget.kcontrol_type |