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 |
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.
> > 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
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;
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>
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); > }
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 --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); }
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(-)