* [PATCH] ASoC: sh: rz-ssi: Improve error handling in rz_ssi_dma_request function
@ 2021-08-14 13:41 Biju Das
2021-08-15 6:58 ` Biju Das
0 siblings, 1 reply; 2+ messages in thread
From: Biju Das @ 2021-08-14 13:41 UTC (permalink / raw)
To: Jaroslav Kysela, Takashi Iwai
Cc: Biju Das, Liam Girdwood, Mark Brown, Lad Prabhakar, alsa-devel,
Geert Uytterhoeven, Chris Paterson, Biju Das, linux-renesas-soc
The rz_ssi_dma_request function only checks the NULL condition for
the value returned by the dma_request_chan function, but this function
can also return an error. If it happens, the subsequent function call to
rz_ssi_dma_slave_config can lead to a kernel crash.
This patch fixes the issue by checking both error and NULL condition
returned by dma_request_chan.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
sound/soc/sh/rz-ssi.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/sound/soc/sh/rz-ssi.c b/sound/soc/sh/rz-ssi.c
index ea8d33ede5d2..3867e2efd3e0 100644
--- a/sound/soc/sh/rz-ssi.c
+++ b/sound/soc/sh/rz-ssi.c
@@ -676,11 +676,19 @@ static void rz_ssi_release_dma_channels(struct rz_ssi_priv *ssi)
static int rz_ssi_dma_request(struct rz_ssi_priv *ssi, struct device *dev)
{
ssi->playback.dma_ch = dma_request_chan(dev, "tx");
+ if (IS_ERR_OR_NULL(ssi->playback.dma_ch))
+ ssi->playback.dma_ch = NULL;
+
ssi->capture.dma_ch = dma_request_chan(dev, "rx");
+ if (IS_ERR_OR_NULL(ssi->capture.dma_ch))
+ ssi->capture.dma_ch = NULL;
+
if (!ssi->playback.dma_ch && !ssi->capture.dma_ch) {
ssi->playback.dma_ch = dma_request_chan(dev, "rt");
- if (!ssi->playback.dma_ch)
+ if (IS_ERR_OR_NULL(ssi->playback.dma_ch)) {
+ ssi->playback.dma_ch = NULL;
goto no_dma;
+ }
ssi->dma_rt = true;
}
--
2.17.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* RE: [PATCH] ASoC: sh: rz-ssi: Improve error handling in rz_ssi_dma_request function
2021-08-14 13:41 [PATCH] ASoC: sh: rz-ssi: Improve error handling in rz_ssi_dma_request function Biju Das
@ 2021-08-15 6:58 ` Biju Das
0 siblings, 0 replies; 2+ messages in thread
From: Biju Das @ 2021-08-15 6:58 UTC (permalink / raw)
To: Jaroslav Kysela, Takashi Iwai, Biju Das
Cc: Liam Girdwood, Mark Brown, Prabhakar Mahadev Lad, alsa-devel,
Geert Uytterhoeven, Chris Paterson, Biju Das, linux-renesas-soc
Hi All,
I have send v2. So please drop this patch.
Cheers,
Biju
> -----Original Message-----
> From: Biju Das <biju.das.jz@bp.renesas.com>
> Sent: 14 August 2021 14:41
> To: Jaroslav Kysela <perex@perex.cz>; Takashi Iwai <tiwai@suse.com>
> Cc: Biju Das <biju.das.jz@bp.renesas.com>; Liam Girdwood
> <lgirdwood@gmail.com>; Mark Brown <broonie@kernel.org>; Prabhakar Mahadev
> Lad <prabhakar.mahadev-lad.rj@bp.renesas.com>; alsa-devel@alsa-
> project.org; Geert Uytterhoeven <geert+renesas@glider.be>; Chris Paterson
> <Chris.Paterson2@renesas.com>; Biju Das <biju.das@bp.renesas.com>; linux-
> renesas-soc@vger.kernel.org
> Subject: [PATCH] ASoC: sh: rz-ssi: Improve error handling in
> rz_ssi_dma_request function
>
> The rz_ssi_dma_request function only checks the NULL condition for the
> value returned by the dma_request_chan function, but this function can
> also return an error. If it happens, the subsequent function call to
> rz_ssi_dma_slave_config can lead to a kernel crash.
>
> This patch fixes the issue by checking both error and NULL condition
> returned by dma_request_chan.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> ---
> sound/soc/sh/rz-ssi.c | 10 +++++++++-
> 1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/sound/soc/sh/rz-ssi.c b/sound/soc/sh/rz-ssi.c index
> ea8d33ede5d2..3867e2efd3e0 100644
> --- a/sound/soc/sh/rz-ssi.c
> +++ b/sound/soc/sh/rz-ssi.c
> @@ -676,11 +676,19 @@ static void rz_ssi_release_dma_channels(struct
> rz_ssi_priv *ssi) static int rz_ssi_dma_request(struct rz_ssi_priv *ssi,
> struct device *dev) {
> ssi->playback.dma_ch = dma_request_chan(dev, "tx");
> + if (IS_ERR_OR_NULL(ssi->playback.dma_ch))
> + ssi->playback.dma_ch = NULL;
> +
> ssi->capture.dma_ch = dma_request_chan(dev, "rx");
> + if (IS_ERR_OR_NULL(ssi->capture.dma_ch))
> + ssi->capture.dma_ch = NULL;
> +
> if (!ssi->playback.dma_ch && !ssi->capture.dma_ch) {
> ssi->playback.dma_ch = dma_request_chan(dev, "rt");
> - if (!ssi->playback.dma_ch)
> + if (IS_ERR_OR_NULL(ssi->playback.dma_ch)) {
> + ssi->playback.dma_ch = NULL;
> goto no_dma;
> + }
>
> ssi->dma_rt = true;
> }
> --
> 2.17.1
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2021-08-15 6:59 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-14 13:41 [PATCH] ASoC: sh: rz-ssi: Improve error handling in rz_ssi_dma_request function Biju Das
2021-08-15 6:58 ` Biju Das
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).