From: Dan Carpenter <dan.carpenter@oracle.com>
To: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Cc: alsa-devel@alsa-project.org
Subject: Re: [bug report] ASoC: rsnd: add null CLOCKIN support
Date: Thu, 10 Jun 2021 07:24:01 +0300 [thread overview]
Message-ID: <20210610042400.GU10983@kadam> (raw)
In-Reply-To: <87tum6booi.wl-kuninori.morimoto.gx@renesas.com>
On Thu, Jun 10, 2021 at 08:31:25AM +0900, Kuninori Morimoto wrote:
>
> Hi Dan
>
> Thank you for your research.
>
> > sound/soc/sh/rcar/adg.c
> > 423 static int rsnd_adg_get_clkin(struct rsnd_priv *priv)
> > 424 {
> > 425 struct rsnd_adg *adg = priv->adg;
> > 426 struct device *dev = rsnd_priv_to_dev(priv);
> > 427 struct clk *clk;
> > 428 int i;
> > 429
> > 430 for (i = 0; i < CLKMAX; i++) {
> > 431 clk = devm_clk_get(dev, clk_name[i]);
> >
> > If devm_clk_get() returns NULL that's not an error.
> >
> >
> > 432
> > 433 if (IS_ERR(clk))
> > 434 clk = rsnd_adg_null_clk_get(priv);
> >
> > But I think if rsnd_adg_null_clk_get() returns an error then it is an
> > error.
> >
> >
> > 435 if (IS_ERR(clk))
> >
> > This is impossible.
> >
> > 436 goto err;
> >
> > So I think it should be:
> >
> > if (IS_ERR(clk)) {
> > clk = rsnd_adg_null_clk_get(priv);
> > if (!clk)
> > goto err;
> > }
>
> Hmm indeed. Thank you for your report, I didn't notice about it.
> How about this ?
>
> ----------
> diff --git a/sound/soc/sh/rcar/adg.c b/sound/soc/sh/rcar/adg.c
> index 0ebee1ed06a9..2b05a1568ee8 100644
> --- a/sound/soc/sh/rcar/adg.c
> +++ b/sound/soc/sh/rcar/adg.c
> @@ -393,7 +393,7 @@ static struct clk *rsnd_adg_create_null_clk(struct rsnd_priv *priv,
> clk = clk_register_fixed_rate(dev, name, parent, 0, 0);
> 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.
> }
>
> return clk;
> @@ -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.
regards,
dan carpenter
next prev parent reply other threads:[~2021-06-10 4:25 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-09 11:31 [bug report] ASoC: rsnd: add null CLOCKIN support Dan Carpenter
2021-06-09 23:31 ` Kuninori Morimoto
2021-06-10 4:24 ` Dan Carpenter [this message]
2021-06-10 4:32 ` Kuninori Morimoto
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210610042400.GU10983@kadam \
--to=dan.carpenter@oracle.com \
--cc=alsa-devel@alsa-project.org \
--cc=kuninori.morimoto.gx@renesas.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.