leds: mt6360: Fix memory leak in mt6360_init_isnk_properties()
authorJavier Carrasco <javier.carrasco.cruz@gmail.com>
Mon, 10 Jun 2024 22:40:26 +0000 (00:40 +0200)
committerLee Jones <lee@kernel.org>
Wed, 26 Jun 2024 15:56:10 +0000 (16:56 +0100)
The fwnode_for_each_child_node() loop requires manual intervention to
decrement the child refcount in case of an early return.

Add the missing calls to fwnode_handle_put(child) to avoid memory leaks
in the error paths.

Cc: stable@vger.kernel.org
Fixes: 679f8652064b ("leds: Add mt6360 driver")
Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
Acked-by: Pavel Machek <pavel@ucw.cz>
Link: https://lore.kernel.org/r/20240611-leds-mt6360-memleak-v1-1-93642eb5011e@gmail.com
Signed-off-by: Lee Jones <lee@kernel.org>
drivers/leds/flash/leds-mt6360.c

index 1b75b4d368348631322c49f14f729bd953890f2f..4c74f1cf01f00d9248288e62c18b9861ab581444 100644 (file)
@@ -643,14 +643,17 @@ static int mt6360_init_isnk_properties(struct mt6360_led *led,
 
                        ret = fwnode_property_read_u32(child, "reg", &reg);
                        if (ret || reg > MT6360_LED_ISNK3 ||
-                           priv->leds_active & BIT(reg))
+                           priv->leds_active & BIT(reg)) {
+                               fwnode_handle_put(child);
                                return -EINVAL;
+                       }
 
                        ret = fwnode_property_read_u32(child, "color", &color);
                        if (ret) {
                                dev_err(priv->dev,
                                        "led %d, no color specified\n",
                                        led->led_no);
+                               fwnode_handle_put(child);
                                return ret;
                        }