* [PATCH] ASoC: Intel: avoid Oops if DMA setup fails
@ 2019-04-26 16:47 Ross Zwisler
2019-04-26 21:03 ` Pierre-Louis Bossart
0 siblings, 1 reply; 9+ messages in thread
From: Ross Zwisler @ 2019-04-26 16:47 UTC (permalink / raw)
To: linux-kernel
Cc: Ross Zwisler, Jaroslav Kysela, Jie Yang, Liam Girdwood,
Mark Brown, Pierre-Louis Bossart, Takashi Iwai, alsa-devel,
stable
Currently in sst_dsp_new() if we get an error return from sst_dma_new()
we just print an error message and then still complete the function
successfully. This means that we are trying to run without sst->dma
properly set up, which will result in NULL pointer dereference when
sst->dma is later used. This was happening for me in
sst_dsp_dma_get_channel():
struct sst_dma *dma = dsp->dma;
...
dma->ch = dma_request_channel(mask, dma_chan_filter, dsp);
This resulted in:
BUG: unable to handle kernel NULL pointer dereference at 0000000000000018
IP: sst_dsp_dma_get_channel+0x4f/0x125 [snd_soc_sst_firmware]
Fix this by adding proper error handling for the case where we fail to
set up DMA.
Signed-off-by: Ross Zwisler <zwisler@google.com>
Cc: stable@vger.kernel.org
---
sound/soc/intel/common/sst-firmware.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/sound/soc/intel/common/sst-firmware.c b/sound/soc/intel/common/sst-firmware.c
index 1e067504b6043..9be3a793a55e3 100644
--- a/sound/soc/intel/common/sst-firmware.c
+++ b/sound/soc/intel/common/sst-firmware.c
@@ -1251,11 +1251,15 @@ struct sst_dsp *sst_dsp_new(struct device *dev,
goto irq_err;
err = sst_dma_new(sst);
- if (err)
+ if (err) {
dev_warn(dev, "sst_dma_new failed %d\n", err);
+ goto dma_err;
+ }
return sst;
+dma_err:
+ free_irq(sst->irq, sst);
irq_err:
if (sst->ops->free)
sst->ops->free(sst);
--
2.21.0.593.g511ec345e18-goog
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH] ASoC: Intel: avoid Oops if DMA setup fails
2019-04-26 16:47 [PATCH] ASoC: Intel: avoid Oops if DMA setup fails Ross Zwisler
@ 2019-04-26 21:03 ` Pierre-Louis Bossart
2019-04-29 17:02 ` Ross Zwisler
2019-04-29 18:25 ` [PATCH v2] " Ross Zwisler
0 siblings, 2 replies; 9+ messages in thread
From: Pierre-Louis Bossart @ 2019-04-26 21:03 UTC (permalink / raw)
To: Ross Zwisler, linux-kernel
Cc: Ross Zwisler, Jaroslav Kysela, Jie Yang, Liam Girdwood,
Mark Brown, Takashi Iwai, alsa-devel, stable
On 4/26/19 11:47 AM, Ross Zwisler wrote:
> Currently in sst_dsp_new() if we get an error return from sst_dma_new()
> we just print an error message and then still complete the function
> successfully. This means that we are trying to run without sst->dma
> properly set up, which will result in NULL pointer dereference when
> sst->dma is later used. This was happening for me in
> sst_dsp_dma_get_channel():
>
> struct sst_dma *dma = dsp->dma;
> ...
> dma->ch = dma_request_channel(mask, dma_chan_filter, dsp);
>
> This resulted in:
>
> BUG: unable to handle kernel NULL pointer dereference at 0000000000000018
> IP: sst_dsp_dma_get_channel+0x4f/0x125 [snd_soc_sst_firmware]
>
> Fix this by adding proper error handling for the case where we fail to
> set up DMA.
>
> Signed-off-by: Ross Zwisler <zwisler@google.com>
> Cc: stable@vger.kernel.org
> ---
> sound/soc/intel/common/sst-firmware.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/sound/soc/intel/common/sst-firmware.c b/sound/soc/intel/common/sst-firmware.c
> index 1e067504b6043..9be3a793a55e3 100644
> --- a/sound/soc/intel/common/sst-firmware.c
> +++ b/sound/soc/intel/common/sst-firmware.c
> @@ -1251,11 +1251,15 @@ struct sst_dsp *sst_dsp_new(struct device *dev,
> goto irq_err;
>
> err = sst_dma_new(sst);
> - if (err)
> + if (err) {
> dev_warn(dev, "sst_dma_new failed %d\n", err);
> + goto dma_err;
> + }
Thanks for the patch.
The fix looks correct, but does it make sense to keep a dev_warn() here?
Should it be changed to dev_err() instead since as you mentioned it's
fatal to keep going.
Also you may want to mention in the commit message that this should only
impact Broadwell and maybe the legacy Baytrail driver. IIRC we don't use
the DMAs in other cases.
>
> return sst;
>
> +dma_err:
> + free_irq(sst->irq, sst);
> irq_err:
> if (sst->ops->free)
> sst->ops->free(sst);
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] ASoC: Intel: avoid Oops if DMA setup fails
2019-04-26 21:03 ` Pierre-Louis Bossart
@ 2019-04-29 17:02 ` Ross Zwisler
2019-04-29 18:25 ` [PATCH v2] " Ross Zwisler
1 sibling, 0 replies; 9+ messages in thread
From: Ross Zwisler @ 2019-04-29 17:02 UTC (permalink / raw)
To: Pierre-Louis Bossart
Cc: Ross Zwisler, linux-kernel, Jaroslav Kysela, Jie Yang,
Liam Girdwood, Mark Brown, Takashi Iwai, alsa-devel, stable
On Fri, Apr 26, 2019 at 04:03:47PM -0500, Pierre-Louis Bossart wrote:
> On 4/26/19 11:47 AM, Ross Zwisler wrote:
> > Currently in sst_dsp_new() if we get an error return from sst_dma_new()
> > we just print an error message and then still complete the function
> > successfully. This means that we are trying to run without sst->dma
> > properly set up, which will result in NULL pointer dereference when
> > sst->dma is later used. This was happening for me in
> > sst_dsp_dma_get_channel():
> >
> > struct sst_dma *dma = dsp->dma;
> > ...
> > dma->ch = dma_request_channel(mask, dma_chan_filter, dsp);
> >
> > This resulted in:
> >
> > BUG: unable to handle kernel NULL pointer dereference at 0000000000000018
> > IP: sst_dsp_dma_get_channel+0x4f/0x125 [snd_soc_sst_firmware]
> >
> > Fix this by adding proper error handling for the case where we fail to
> > set up DMA.
> >
> > Signed-off-by: Ross Zwisler <zwisler@google.com>
> > Cc: stable@vger.kernel.org
> > ---
> > sound/soc/intel/common/sst-firmware.c | 6 +++++-
> > 1 file changed, 5 insertions(+), 1 deletion(-)
> >
> > diff --git a/sound/soc/intel/common/sst-firmware.c b/sound/soc/intel/common/sst-firmware.c
> > index 1e067504b6043..9be3a793a55e3 100644
> > --- a/sound/soc/intel/common/sst-firmware.c
> > +++ b/sound/soc/intel/common/sst-firmware.c
> > @@ -1251,11 +1251,15 @@ struct sst_dsp *sst_dsp_new(struct device *dev,
> > goto irq_err;
> > err = sst_dma_new(sst);
> > - if (err)
> > + if (err) {
> > dev_warn(dev, "sst_dma_new failed %d\n", err);
> > + goto dma_err;
> > + }
>
> Thanks for the patch.
> The fix looks correct, but does it make sense to keep a dev_warn() here?
> Should it be changed to dev_err() instead since as you mentioned it's fatal
> to keep going.
> Also you may want to mention in the commit message that this should only
> impact Broadwell and maybe the legacy Baytrail driver. IIRC we don't use the
> DMAs in other cases.
Sure, I'll address both of these in a v2. Thank you for the quick review.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2] ASoC: Intel: avoid Oops if DMA setup fails
2019-04-26 21:03 ` Pierre-Louis Bossart
2019-04-29 17:02 ` Ross Zwisler
@ 2019-04-29 18:25 ` Ross Zwisler
2019-04-29 18:45 ` Pierre-Louis Bossart
` (4 more replies)
1 sibling, 5 replies; 9+ messages in thread
From: Ross Zwisler @ 2019-04-29 18:25 UTC (permalink / raw)
To: Pierre-Louis Bossart, linux-kernel
Cc: Ross Zwisler, Jaroslav Kysela, Jie Yang, Liam Girdwood,
Mark Brown, Takashi Iwai, alsa-devel, stable
Currently in sst_dsp_new() if we get an error return from sst_dma_new()
we just print an error message and then still complete the function
successfully. This means that we are trying to run without sst->dma
properly set up, which will result in NULL pointer dereference when
sst->dma is later used. This was happening for me in
sst_dsp_dma_get_channel():
struct sst_dma *dma = dsp->dma;
...
dma->ch = dma_request_channel(mask, dma_chan_filter, dsp);
This resulted in:
BUG: unable to handle kernel NULL pointer dereference at 0000000000000018
IP: sst_dsp_dma_get_channel+0x4f/0x125 [snd_soc_sst_firmware]
Fix this by adding proper error handling for the case where we fail to
set up DMA.
This change only affects Haswell and Broadwell systems. Baytrail
systems explicilty opt-out of DMA via sst->pdata->resindex_dma_base
being set to -1.
Signed-off-by: Ross Zwisler <zwisler@google.com>
Cc: stable@vger.kernel.org
---
Changes in v2:
- Upgraded the sst_dma_new() failure message from dev_warn() to dev_err()
(Pierre-Louis).
- Noted in the changelog that this change only affects Haswell and
Broadwell (Pierre-Louis).
---
sound/soc/intel/common/sst-firmware.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/sound/soc/intel/common/sst-firmware.c b/sound/soc/intel/common/sst-firmware.c
index 1e067504b6043..f830e59f93eaa 100644
--- a/sound/soc/intel/common/sst-firmware.c
+++ b/sound/soc/intel/common/sst-firmware.c
@@ -1251,11 +1251,15 @@ struct sst_dsp *sst_dsp_new(struct device *dev,
goto irq_err;
err = sst_dma_new(sst);
- if (err)
- dev_warn(dev, "sst_dma_new failed %d\n", err);
+ if (err) {
+ dev_err(dev, "sst_dma_new failed %d\n", err);
+ goto dma_err;
+ }
return sst;
+dma_err:
+ free_irq(sst->irq, sst);
irq_err:
if (sst->ops->free)
sst->ops->free(sst);
--
2.21.0.593.g511ec345e18-goog
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v2] ASoC: Intel: avoid Oops if DMA setup fails
2019-04-29 18:25 ` [PATCH v2] " Ross Zwisler
@ 2019-04-29 18:45 ` Pierre-Louis Bossart
2019-05-03 4:34 ` Mark Brown
` (3 subsequent siblings)
4 siblings, 0 replies; 9+ messages in thread
From: Pierre-Louis Bossart @ 2019-04-29 18:45 UTC (permalink / raw)
To: Ross Zwisler, linux-kernel
Cc: Ross Zwisler, Jaroslav Kysela, Jie Yang, Liam Girdwood,
Mark Brown, Takashi Iwai, alsa-devel, stable
On 4/29/19 1:25 PM, Ross Zwisler wrote:
> Currently in sst_dsp_new() if we get an error return from sst_dma_new()
> we just print an error message and then still complete the function
> successfully. This means that we are trying to run without sst->dma
> properly set up, which will result in NULL pointer dereference when
> sst->dma is later used. This was happening for me in
> sst_dsp_dma_get_channel():
>
> struct sst_dma *dma = dsp->dma;
> ...
> dma->ch = dma_request_channel(mask, dma_chan_filter, dsp);
>
> This resulted in:
>
> BUG: unable to handle kernel NULL pointer dereference at 0000000000000018
> IP: sst_dsp_dma_get_channel+0x4f/0x125 [snd_soc_sst_firmware]
>
> Fix this by adding proper error handling for the case where we fail to
> set up DMA.
>
> This change only affects Haswell and Broadwell systems. Baytrail
> systems explicilty opt-out of DMA via sst->pdata->resindex_dma_base
> being set to -1.
>
> Signed-off-by: Ross Zwisler <zwisler@google.com>
> Cc: stable@vger.kernel.org
Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Thanks Ross!
FWIW we should start deprecating this driver now and transition to SOF.
I'll double-check how the upcoming 1.3 release works on my Pixel
2015/Samus device later this week.
> ---
>
> Changes in v2:
> - Upgraded the sst_dma_new() failure message from dev_warn() to dev_err()
> (Pierre-Louis).
> - Noted in the changelog that this change only affects Haswell and
> Broadwell (Pierre-Louis).
>
> ---
> sound/soc/intel/common/sst-firmware.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/sound/soc/intel/common/sst-firmware.c b/sound/soc/intel/common/sst-firmware.c
> index 1e067504b6043..f830e59f93eaa 100644
> --- a/sound/soc/intel/common/sst-firmware.c
> +++ b/sound/soc/intel/common/sst-firmware.c
> @@ -1251,11 +1251,15 @@ struct sst_dsp *sst_dsp_new(struct device *dev,
> goto irq_err;
>
> err = sst_dma_new(sst);
> - if (err)
> - dev_warn(dev, "sst_dma_new failed %d\n", err);
> + if (err) {
> + dev_err(dev, "sst_dma_new failed %d\n", err);
> + goto dma_err;
> + }
>
> return sst;
>
> +dma_err:
> + free_irq(sst->irq, sst);
> irq_err:
> if (sst->ops->free)
> sst->ops->free(sst);
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2] ASoC: Intel: avoid Oops if DMA setup fails
2019-04-29 18:25 ` [PATCH v2] " Ross Zwisler
2019-04-29 18:45 ` Pierre-Louis Bossart
@ 2019-05-03 4:34 ` Mark Brown
2019-05-03 6:18 ` Applied "ASoC: Intel: avoid Oops if DMA setup fails" to the asoc tree Mark Brown
` (2 subsequent siblings)
4 siblings, 0 replies; 9+ messages in thread
From: Mark Brown @ 2019-05-03 4:34 UTC (permalink / raw)
To: Ross Zwisler
Cc: Pierre-Louis Bossart, linux-kernel, Ross Zwisler, Jaroslav Kysela,
Jie Yang, Liam Girdwood, Takashi Iwai, alsa-devel, stable
[-- Attachment #1: Type: text/plain, Size: 373 bytes --]
On Mon, Apr 29, 2019 at 12:25:17PM -0600, Ross Zwisler wrote:
> Currently in sst_dsp_new() if we get an error return from sst_dma_new()
> we just print an error message and then still complete the function
> successfully. This means that we are trying to run without sst->dma
Please don't bury patches in the replies to existing threads, it makes
it harder to spot them.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Applied "ASoC: Intel: avoid Oops if DMA setup fails" to the asoc tree
2019-04-29 18:25 ` [PATCH v2] " Ross Zwisler
2019-04-29 18:45 ` Pierre-Louis Bossart
2019-05-03 4:34 ` Mark Brown
@ 2019-05-03 6:18 ` Mark Brown
2019-05-03 6:21 ` Mark Brown
2019-05-03 6:23 ` Mark Brown
4 siblings, 0 replies; 9+ messages in thread
From: Mark Brown @ 2019-05-03 6:18 UTC (permalink / raw)
To: Ross Zwisler
Cc: alsa-devel, Jaroslav Kysela, Jie Yang, Liam Girdwood,
linux-kernel, Mark Brown, Pierre-Louis Bossart, Ross Zwisler,
stable, Takashi Iwai
The patch
ASoC: Intel: avoid Oops if DMA setup fails
has been applied to the asoc tree at
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-5.2
All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying
to this mail.
Thanks,
Mark
>From 0efa3334d65b7f421ba12382dfa58f6ff5bf83c4 Mon Sep 17 00:00:00 2001
From: Ross Zwisler <zwisler@chromium.org>
Date: Mon, 29 Apr 2019 12:25:17 -0600
Subject: [PATCH] ASoC: Intel: avoid Oops if DMA setup fails
Currently in sst_dsp_new() if we get an error return from sst_dma_new()
we just print an error message and then still complete the function
successfully. This means that we are trying to run without sst->dma
properly set up, which will result in NULL pointer dereference when
sst->dma is later used. This was happening for me in
sst_dsp_dma_get_channel():
struct sst_dma *dma = dsp->dma;
...
dma->ch = dma_request_channel(mask, dma_chan_filter, dsp);
This resulted in:
BUG: unable to handle kernel NULL pointer dereference at 0000000000000018
IP: sst_dsp_dma_get_channel+0x4f/0x125 [snd_soc_sst_firmware]
Fix this by adding proper error handling for the case where we fail to
set up DMA.
This change only affects Haswell and Broadwell systems. Baytrail
systems explicilty opt-out of DMA via sst->pdata->resindex_dma_base
being set to -1.
Signed-off-by: Ross Zwisler <zwisler@google.com>
Cc: stable@vger.kernel.org
Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
---
sound/soc/intel/common/sst-firmware.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/sound/soc/intel/common/sst-firmware.c b/sound/soc/intel/common/sst-firmware.c
index 1e067504b604..f830e59f93ea 100644
--- a/sound/soc/intel/common/sst-firmware.c
+++ b/sound/soc/intel/common/sst-firmware.c
@@ -1251,11 +1251,15 @@ struct sst_dsp *sst_dsp_new(struct device *dev,
goto irq_err;
err = sst_dma_new(sst);
- if (err)
- dev_warn(dev, "sst_dma_new failed %d\n", err);
+ if (err) {
+ dev_err(dev, "sst_dma_new failed %d\n", err);
+ goto dma_err;
+ }
return sst;
+dma_err:
+ free_irq(sst->irq, sst);
irq_err:
if (sst->ops->free)
sst->ops->free(sst);
--
2.20.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Applied "ASoC: Intel: avoid Oops if DMA setup fails" to the asoc tree
2019-04-29 18:25 ` [PATCH v2] " Ross Zwisler
` (2 preceding siblings ...)
2019-05-03 6:18 ` Applied "ASoC: Intel: avoid Oops if DMA setup fails" to the asoc tree Mark Brown
@ 2019-05-03 6:21 ` Mark Brown
2019-05-03 6:23 ` Mark Brown
4 siblings, 0 replies; 9+ messages in thread
From: Mark Brown @ 2019-05-03 6:21 UTC (permalink / raw)
To: Ross Zwisler
Cc: alsa-devel, Jaroslav Kysela, Jie Yang, Liam Girdwood,
linux-kernel, Mark Brown, Pierre-Louis Bossart, Ross Zwisler,
stable, Takashi Iwai
The patch
ASoC: Intel: avoid Oops if DMA setup fails
has been applied to the asoc tree at
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-5.2
All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying
to this mail.
Thanks,
Mark
>From 0efa3334d65b7f421ba12382dfa58f6ff5bf83c4 Mon Sep 17 00:00:00 2001
From: Ross Zwisler <zwisler@chromium.org>
Date: Mon, 29 Apr 2019 12:25:17 -0600
Subject: [PATCH] ASoC: Intel: avoid Oops if DMA setup fails
Currently in sst_dsp_new() if we get an error return from sst_dma_new()
we just print an error message and then still complete the function
successfully. This means that we are trying to run without sst->dma
properly set up, which will result in NULL pointer dereference when
sst->dma is later used. This was happening for me in
sst_dsp_dma_get_channel():
struct sst_dma *dma = dsp->dma;
...
dma->ch = dma_request_channel(mask, dma_chan_filter, dsp);
This resulted in:
BUG: unable to handle kernel NULL pointer dereference at 0000000000000018
IP: sst_dsp_dma_get_channel+0x4f/0x125 [snd_soc_sst_firmware]
Fix this by adding proper error handling for the case where we fail to
set up DMA.
This change only affects Haswell and Broadwell systems. Baytrail
systems explicilty opt-out of DMA via sst->pdata->resindex_dma_base
being set to -1.
Signed-off-by: Ross Zwisler <zwisler@google.com>
Cc: stable@vger.kernel.org
Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
---
sound/soc/intel/common/sst-firmware.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/sound/soc/intel/common/sst-firmware.c b/sound/soc/intel/common/sst-firmware.c
index 1e067504b604..f830e59f93ea 100644
--- a/sound/soc/intel/common/sst-firmware.c
+++ b/sound/soc/intel/common/sst-firmware.c
@@ -1251,11 +1251,15 @@ struct sst_dsp *sst_dsp_new(struct device *dev,
goto irq_err;
err = sst_dma_new(sst);
- if (err)
- dev_warn(dev, "sst_dma_new failed %d\n", err);
+ if (err) {
+ dev_err(dev, "sst_dma_new failed %d\n", err);
+ goto dma_err;
+ }
return sst;
+dma_err:
+ free_irq(sst->irq, sst);
irq_err:
if (sst->ops->free)
sst->ops->free(sst);
--
2.20.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Applied "ASoC: Intel: avoid Oops if DMA setup fails" to the asoc tree
2019-04-29 18:25 ` [PATCH v2] " Ross Zwisler
` (3 preceding siblings ...)
2019-05-03 6:21 ` Mark Brown
@ 2019-05-03 6:23 ` Mark Brown
4 siblings, 0 replies; 9+ messages in thread
From: Mark Brown @ 2019-05-03 6:23 UTC (permalink / raw)
To: Ross Zwisler
Cc: alsa-devel, Jaroslav Kysela, Jie Yang, Liam Girdwood,
linux-kernel, Mark Brown, Pierre-Louis Bossart, Ross Zwisler,
stable, Takashi Iwai
The patch
ASoC: Intel: avoid Oops if DMA setup fails
has been applied to the asoc tree at
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-5.2
All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying
to this mail.
Thanks,
Mark
>From 0efa3334d65b7f421ba12382dfa58f6ff5bf83c4 Mon Sep 17 00:00:00 2001
From: Ross Zwisler <zwisler@chromium.org>
Date: Mon, 29 Apr 2019 12:25:17 -0600
Subject: [PATCH] ASoC: Intel: avoid Oops if DMA setup fails
Currently in sst_dsp_new() if we get an error return from sst_dma_new()
we just print an error message and then still complete the function
successfully. This means that we are trying to run without sst->dma
properly set up, which will result in NULL pointer dereference when
sst->dma is later used. This was happening for me in
sst_dsp_dma_get_channel():
struct sst_dma *dma = dsp->dma;
...
dma->ch = dma_request_channel(mask, dma_chan_filter, dsp);
This resulted in:
BUG: unable to handle kernel NULL pointer dereference at 0000000000000018
IP: sst_dsp_dma_get_channel+0x4f/0x125 [snd_soc_sst_firmware]
Fix this by adding proper error handling for the case where we fail to
set up DMA.
This change only affects Haswell and Broadwell systems. Baytrail
systems explicilty opt-out of DMA via sst->pdata->resindex_dma_base
being set to -1.
Signed-off-by: Ross Zwisler <zwisler@google.com>
Cc: stable@vger.kernel.org
Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
---
sound/soc/intel/common/sst-firmware.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/sound/soc/intel/common/sst-firmware.c b/sound/soc/intel/common/sst-firmware.c
index 1e067504b604..f830e59f93ea 100644
--- a/sound/soc/intel/common/sst-firmware.c
+++ b/sound/soc/intel/common/sst-firmware.c
@@ -1251,11 +1251,15 @@ struct sst_dsp *sst_dsp_new(struct device *dev,
goto irq_err;
err = sst_dma_new(sst);
- if (err)
- dev_warn(dev, "sst_dma_new failed %d\n", err);
+ if (err) {
+ dev_err(dev, "sst_dma_new failed %d\n", err);
+ goto dma_err;
+ }
return sst;
+dma_err:
+ free_irq(sst->irq, sst);
irq_err:
if (sst->ops->free)
sst->ops->free(sst);
--
2.20.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
end of thread, other threads:[~2019-05-03 6:23 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-04-26 16:47 [PATCH] ASoC: Intel: avoid Oops if DMA setup fails Ross Zwisler
2019-04-26 21:03 ` Pierre-Louis Bossart
2019-04-29 17:02 ` Ross Zwisler
2019-04-29 18:25 ` [PATCH v2] " Ross Zwisler
2019-04-29 18:45 ` Pierre-Louis Bossart
2019-05-03 4:34 ` Mark Brown
2019-05-03 6:18 ` Applied "ASoC: Intel: avoid Oops if DMA setup fails" to the asoc tree Mark Brown
2019-05-03 6:21 ` Mark Brown
2019-05-03 6:23 ` Mark Brown
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).