diff mbox series

[v3] clk: qcom: Fix error checking for devm_clk_hw_get_clk()

Message ID 20240827025252.3512746-1-yanzhen@vivo.com (mailing list archive)
State New
Headers show
Series [v3] clk: qcom: Fix error checking for devm_clk_hw_get_clk() | expand

Commit Message

Yan Zhen Aug. 27, 2024, 2:52 a.m. UTC
The devm_clk_hw_get_clk() function returns error pointers.
It never returns NULL.  Update the check accordingly.

Fixes: 8737ec830ee3 ("clk: qcom: common: Add interconnect clocks support")'
Signed-off-by: Yan Zhen <yanzhen@vivo.com>
---

Changes in v3:
- Providing a "fixes" tag blaming the commit.

 drivers/clk/qcom/common.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Stephen Boyd Aug. 27, 2024, 6:18 p.m. UTC | #1
Quoting Yan Zhen (2024-08-26 19:52:52)
> The devm_clk_hw_get_clk() function returns error pointers.
> It never returns NULL.  Update the check accordingly.

It can return NULL if the 'hw' pointer passed in is NULL.
Markus Elfring Aug. 27, 2024, 8:08 p.m. UTC | #2
> > The devm_clk_hw_get_clk() function returns error pointers.
> > It never returns NULL.  Update the check accordingly.
>
> It can return NULL if the 'hw' pointer passed in is NULL.

How does this view fit to a published function implementation?
https://elixir.bootlin.com/linux/v6.11-rc5/source/drivers/clk/clk.c#L4703

Regards,
Markus
Dmitry Baryshkov Aug. 29, 2024, 9:06 a.m. UTC | #3
On Tue, Aug 27, 2024 at 11:18:10AM GMT, Stephen Boyd wrote:
> Quoting Yan Zhen (2024-08-26 19:52:52)
> > The devm_clk_hw_get_clk() function returns error pointers.
> > It never returns NULL.  Update the check accordingly.
> 
> It can return NULL if the 'hw' pointer passed in is NULL.

No, it will crash:

        WARN_ON_ONCE(dev != hw->core->dev);

Furthermore, clk_hw_get_clk() also doesn't have NULL checks and will
crash if NULL is passed as hw.

struct clk *clk_hw_get_clk(struct clk_hw *hw, const char *con_id)
{
        struct device *dev = hw->core->dev;
Dmitry Baryshkov Aug. 29, 2024, 9:07 a.m. UTC | #4
On Tue, Aug 27, 2024 at 10:52:52AM GMT, Yan Zhen wrote:
> The devm_clk_hw_get_clk() function returns error pointers.
> It never returns NULL.  Update the check accordingly.
> 
> Fixes: 8737ec830ee3 ("clk: qcom: common: Add interconnect clocks support")'
> Signed-off-by: Yan Zhen <yanzhen@vivo.com>
> ---
> 
> Changes in v3:
> - Providing a "fixes" tag blaming the commit.
> 
>  drivers/clk/qcom/common.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 

Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Christophe JAILLET Aug. 29, 2024, 4:59 p.m. UTC | #5
Le 27/08/2024 à 04:52, Yan Zhen a écrit :
> The devm_clk_hw_get_clk() function returns error pointers.
> It never returns NULL.  Update the check accordingly.
> 
> Fixes: 8737ec830ee3 ("clk: qcom: common: Add interconnect clocks support")'
> Signed-off-by: Yan Zhen <yanzhen@vivo.com>
> ---
> 
> Changes in v3:
> - Providing a "fixes" tag blaming the commit.
> 
>   drivers/clk/qcom/common.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/clk/qcom/common.c b/drivers/clk/qcom/common.c
> index 33cc1f73c69d..5a9e653916ea 100644
> --- a/drivers/clk/qcom/common.c
> +++ b/drivers/clk/qcom/common.c
> @@ -273,8 +273,8 @@ static int qcom_cc_icc_register(struct device *dev,
>   		icd[i].slave_id = desc->icc_hws[i].slave_id;
>   		hws = &desc->clks[desc->icc_hws[i].clk_id]->hw;
>   		icd[i].clk = devm_clk_hw_get_clk(dev, hws, "icc");
> -		if (!icd[i].clk)
> -			return dev_err_probe(dev, -ENOENT,
> +		if (IS_ERR(icd[i].clk))
> +			return dev_err_probe(dev, PTR_ERR(icd[i].clk),
>   					     "(%d) clock entry is null\n", i);

Nitpick: Maybe the message could be updated as-well?

CJ

>   		icd[i].name = clk_hw_get_name(hws);
>   	}
Stephen Boyd Aug. 29, 2024, 5:42 p.m. UTC | #6
Quoting Dmitry Baryshkov (2024-08-29 02:06:51)
> On Tue, Aug 27, 2024 at 11:18:10AM GMT, Stephen Boyd wrote:
> > Quoting Yan Zhen (2024-08-26 19:52:52)
> > > The devm_clk_hw_get_clk() function returns error pointers.
> > > It never returns NULL.  Update the check accordingly.
> > 
> > It can return NULL if the 'hw' pointer passed in is NULL.
> 
> No, it will crash:
> 
>         WARN_ON_ONCE(dev != hw->core->dev);
> 
> Furthermore, clk_hw_get_clk() also doesn't have NULL checks and will
> crash if NULL is passed as hw.

Ah, thanks. I misread it as clk_hw_create_clk().
diff mbox series

Patch

diff --git a/drivers/clk/qcom/common.c b/drivers/clk/qcom/common.c
index 33cc1f73c69d..5a9e653916ea 100644
--- a/drivers/clk/qcom/common.c
+++ b/drivers/clk/qcom/common.c
@@ -273,8 +273,8 @@  static int qcom_cc_icc_register(struct device *dev,
 		icd[i].slave_id = desc->icc_hws[i].slave_id;
 		hws = &desc->clks[desc->icc_hws[i].clk_id]->hw;
 		icd[i].clk = devm_clk_hw_get_clk(dev, hws, "icc");
-		if (!icd[i].clk)
-			return dev_err_probe(dev, -ENOENT,
+		if (IS_ERR(icd[i].clk))
+			return dev_err_probe(dev, PTR_ERR(icd[i].clk),
 					     "(%d) clock entry is null\n", i);
 		icd[i].name = clk_hw_get_name(hws);
 	}