Each iteration of for_each_child_of_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 three places.
Issue found with Coccinelle.
Signed-off-by: Nishka Dasgupta <nishkadg.linux@gmail.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
                keys->keys[index].regs = &mtk_pmic_regs->keys_regs[index];
 
                keys->keys[index].irq = platform_get_irq(pdev, index);
-               if (keys->keys[index].irq < 0)
+               if (keys->keys[index].irq < 0) {
+                       of_node_put(child);
                        return keys->keys[index].irq;
+               }
 
                error = of_property_read_u32(child,
                        "linux,keycodes", &keys->keys[index].keycode);
                        dev_err(keys->dev,
                                "failed to read key:%d linux,keycode property: %d\n",
                                index, error);
+                       of_node_put(child);
                        return error;
                }
 
                        keys->keys[index].wakeup = true;
 
                error = mtk_pmic_key_setup(keys, &keys->keys[index]);
-               if (error)
+               if (error) {
+                       of_node_put(child);
                        return error;
+               }
 
                index++;
        }