The error check during the registration of FODs is incorrect. The code
currently checks IS_ERR(pll_name) immediately after assigning
fod_name[n].

Since pll_name is checked in a previous block, this condition will
always be false, causing any allocation failure in
versaclock_get_name() for fod_name to be ignored. This could lead
to usage of an invalid pointer.

Fix the condition to check fod_name[n] instead.

Fixes: dcf2cee77f2d ("clk: clk_versaclock: Add support for versaclock driver")
Signed-off-by: Kuan-Wei Chiu <[email protected]>
---
 drivers/clk/clk_versaclock.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/clk/clk_versaclock.c b/drivers/clk/clk_versaclock.c
index 19a787eaf0c..1dbde75f180 100644
--- a/drivers/clk/clk_versaclock.c
+++ b/drivers/clk/clk_versaclock.c
@@ -945,7 +945,7 @@ int versaclock_probe(struct udevice *dev)
        /* Register FODs */
        for (n = 0; n < vc5->chip_info->clk_fod_cnt; n++) {
                fod_name[n] = versaclock_get_name(dev->name, "fod", n);
-               if (IS_ERR(pll_name)) {
+               if (IS_ERR(fod_name[n])) {
                        ret = PTR_ERR(fod_name[n]);
                        goto free_fod;
                }
-- 
2.52.0.239.gd5f0c6e74e-goog

Reply via email to