[bug report] ASoC: rsnd: add null CLOCKIN support

Kuninori Morimoto kuninori.morimoto.gx at renesas.com
Thu Jun 10 06:32:40 CEST 2021


Hi Dan

Thank you for your feedback

> >  	if (IS_ERR(clk)) {
> >  		dev_err(dev, "create null clk error\n");
> > -		return NULL;
> > +		return PTR_ERR(clk);
> 
> Yes, I think this part is correct.  If an error happens, then it should
> be reported to the user so they can fix it.

Good !

> > @@ -430,9 +430,9 @@ static int rsnd_adg_get_clkin(struct rsnd_priv *priv)
> >  	for (i = 0; i < CLKMAX; i++) {
> >  		clk = devm_clk_get(dev, clk_name[i]);
> >  
> > -		if (IS_ERR(clk))
> > +		if (IS_ERR_OR_NULL(clk))
> >  			clk = rsnd_adg_null_clk_get(priv);
> > -		if (IS_ERR(clk))
> > +		if (IS_ERR_OR_NULL(clk))
> >  			goto err;
> 
> But this is not correct.
> 
> If a function like devm_clk_get() returns NULL, then it's not an error,
> it's something where the user deliberately chose to disable the feature.
> It shouldn't trigger an error message and the rest of the driver should
> be written to accomodate it.
> 
> >  
> >  		adg->clk[i] = clk;
> 
> So we should assign the NULL pointer here and add NULL checks to make
> sure that it doesn't lead to a NULL dereference.

Ah, in this driver, if it got error or NULL clk,
it try to call rsnd_adg_null_clk_get() and use null_clk instead of NULL.
In other words, all adg->clk[i] should not NULL.
If one of them was NULL, it is error for this driver.
If so, my suggested code was OK, I hope.

Thank you for your help !!

Best regards
---
Kuninori Morimoto


More information about the Alsa-devel mailing list