OSDN Git Service

Input: mtk-pmic-keys - add of_node_put() before return
authorNishka Dasgupta <nishkadg.linux@gmail.com>
Fri, 12 Jul 2019 06:49:47 +0000 (23:49 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Fri, 12 Jul 2019 06:56:05 +0000 (23:56 -0700)
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>
drivers/input/keyboard/mtk-pmic-keys.c

index 8e6ebab..ebfe119 100644 (file)
@@ -286,8 +286,10 @@ static int mtk_pmic_keys_probe(struct platform_device *pdev)
                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);
@@ -295,6 +297,7 @@ static int mtk_pmic_keys_probe(struct platform_device *pdev)
                        dev_err(keys->dev,
                                "failed to read key:%d linux,keycode property: %d\n",
                                index, error);
+                       of_node_put(child);
                        return error;
                }
 
@@ -302,8 +305,10 @@ static int mtk_pmic_keys_probe(struct platform_device *pdev)
                        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++;
        }