[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