]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
pinctrl: falcon: Add of_node_put() before return
authorNishka Dasgupta <nishkadg.linux@gmail.com>
Sun, 4 Aug 2019 15:27:45 +0000 (20:57 +0530)
committerLinus Walleij <linus.walleij@linaro.org>
Tue, 6 Aug 2019 12:50:04 +0000 (14:50 +0200)
Each iteration of for_each_compatible_node puts the previous node, but in
the case of a return from the middle of the loop, there is no put, thus
causing a memory leak. Hence add an of_node_put before the return in two
places.
Issue found with Coccinelle.

Signed-off-by: Nishka Dasgupta <nishkadg.linux@gmail.com>
Link: https://lore.kernel.org/r/20190804152745.2231-1-nishkadg.linux@gmail.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/pinctrl-falcon.c

index 4a3b8d2677fd498feaa25011a25b663ab1fefb17..a454f57c264eede94a37a7d51573fc3c717c2982 100644 (file)
@@ -451,12 +451,15 @@ static int pinctrl_falcon_probe(struct platform_device *pdev)
                falcon_info.clk[*bank] = clk_get(&ppdev->dev, NULL);
                if (IS_ERR(falcon_info.clk[*bank])) {
                        dev_err(&ppdev->dev, "failed to get clock\n");
+                       of_node_put(np)
                        return PTR_ERR(falcon_info.clk[*bank]);
                }
                falcon_info.membase[*bank] = devm_ioremap_resource(&pdev->dev,
                                                                   &res);
-               if (IS_ERR(falcon_info.membase[*bank]))
+               if (IS_ERR(falcon_info.membase[*bank])) {
+                       of_node_put(np);
                        return PTR_ERR(falcon_info.membase[*bank]);
+               }
 
                avail = pad_r32(falcon_info.membase[*bank],
                                        LTQ_PADC_AVAIL);