[PATCH] ASoC: sh: rz-ssi: Improve error handling in rz_ssi_dma_request function
Biju Das
biju.das.jz at bp.renesas.com
Sun Aug 15 08:58:53 CEST 2021
Hi All,
I have send v2. So please drop this patch.
Cheers,
Biju
> -----Original Message-----
> From: Biju Das <biju.das.jz at bp.renesas.com>
> Sent: 14 August 2021 14:41
> To: Jaroslav Kysela <perex at perex.cz>; Takashi Iwai <tiwai at suse.com>
> Cc: Biju Das <biju.das.jz at bp.renesas.com>; Liam Girdwood
> <lgirdwood at gmail.com>; Mark Brown <broonie at kernel.org>; Prabhakar Mahadev
> Lad <prabhakar.mahadev-lad.rj at bp.renesas.com>; alsa-devel at alsa-
> project.org; Geert Uytterhoeven <geert+renesas at glider.be>; Chris Paterson
> <Chris.Paterson2 at renesas.com>; Biju Das <biju.das at bp.renesas.com>; linux-
> renesas-soc at 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 at 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
More information about the Alsa-devel
mailing list