Просмотр исходного кода

kernel: mv88e6xxx: backport fixes

These patches fix bugs in a patch we backported.

These patch were cherry picked from upstream Linux because it references
a patch we backported in the fixes tag.

Fixes: c990f6e15669 ("linux: generic: net: dsa: mv88e6xxx LED support")
Link: https://github.com/openwrt/openwrt/pull/21366
(cherry picked from commit 9c4b7fbaadd6abb888c73617ec7791aadb0de4f6)
Link: https://github.com/openwrt/openwrt/pull/21390
Signed-off-by: Hauke Mehrtens <[email protected]>
Hauke Mehrtens 1 месяц назад
Родитель
Сommit
fafe124d8e

+ 31 - 0
target/linux/generic/backport-6.12/741-v6.13-net-dsa-mv88e6xxx-fix-unreleased-fwnode_handle-in-se.patch

@@ -0,0 +1,31 @@
+From b8ee7a11c75436b85fa1641aa5f970de0f8a575c Mon Sep 17 00:00:00 2001
+From: Javier Carrasco <[email protected]>
+Date: Sat, 19 Oct 2024 22:16:49 +0200
+Subject: net: dsa: mv88e6xxx: fix unreleased fwnode_handle in setup_port()
+
+'ports_fwnode' is initialized via device_get_named_child_node(), which
+requires a call to fwnode_handle_put() when the variable is no longer
+required to avoid leaking memory.
+
+Add the missing fwnode_handle_put() after 'ports_fwnode' has been used
+and is no longer required.
+
+Fixes: 94a2a84f5e9e ("net: dsa: mv88e6xxx: Support LED control")
+Signed-off-by: Javier Carrasco <[email protected]>
+Reviewed-by: Andrew Lunn <[email protected]>
+Reviewed-by: Linus Walleij <[email protected]>
+Signed-off-by: David S. Miller <[email protected]>
+---
+ drivers/net/dsa/mv88e6xxx/chip.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/net/dsa/mv88e6xxx/chip.c
++++ b/drivers/net/dsa/mv88e6xxx/chip.c
+@@ -3441,6 +3441,7 @@ static int mv88e6xxx_setup_port(struct m
+ 				break;
+ 			}
+ 		}
++		fwnode_handle_put(ports_fwnode);
+ 	} else {
+ 		dev_dbg(chip->dev, "no ethernet ports node defined for the device\n");
+ 	}

+ 68 - 0
target/linux/generic/backport-6.12/742-v6.17-net-dsa-mv88e6xxx-Fix-fwnode-reference-leaks-in-mv88.patch

@@ -0,0 +1,68 @@
+From f63e7c8a83892781f6ceb55566f9497639c44555 Mon Sep 17 00:00:00 2001
+From: Miaoqian Lin <[email protected]>
+Date: Mon, 1 Sep 2025 15:32:23 +0800
+Subject: net: dsa: mv88e6xxx: Fix fwnode reference leaks in
+ mv88e6xxx_port_setup_leds
+
+Fix multiple fwnode reference leaks:
+
+1. The function calls fwnode_get_named_child_node() to get the "leds" node,
+   but never calls fwnode_handle_put(leds) to release this reference.
+
+2. Within the fwnode_for_each_child_node() loop, the early return
+   paths that don't properly release the "led" fwnode reference.
+
+This fix follows the same pattern as commit d029edefed39
+("net dsa: qca8k: fix usages of device_get_named_child_node()")
+
+Fixes: 94a2a84f5e9e ("net: dsa: mv88e6xxx: Support LED control")
+Cc: [email protected]
+Signed-off-by: Miaoqian Lin <[email protected]>
+Reviewed-by: Linus Walleij <[email protected]>
+Link: https://patch.msgid.link/[email protected]
+Signed-off-by: Jakub Kicinski <[email protected]>
+---
+ drivers/net/dsa/mv88e6xxx/leds.c | 17 +++++++++++++----
+ 1 file changed, 13 insertions(+), 4 deletions(-)
+
+--- a/drivers/net/dsa/mv88e6xxx/leds.c
++++ b/drivers/net/dsa/mv88e6xxx/leds.c
+@@ -779,7 +779,8 @@ int mv88e6xxx_port_setup_leds(struct mv8
+ 			continue;
+ 		if (led_num > 1) {
+ 			dev_err(dev, "invalid LED specified port %d\n", port);
+-			return -EINVAL;
++			ret = -EINVAL;
++			goto err_put_led;
+ 		}
+ 
+ 		if (led_num == 0)
+@@ -823,17 +824,25 @@ int mv88e6xxx_port_setup_leds(struct mv8
+ 		init_data.devname_mandatory = true;
+ 		init_data.devicename = kasprintf(GFP_KERNEL, "%s:0%d:0%d", chip->info->name,
+ 						 port, led_num);
+-		if (!init_data.devicename)
+-			return -ENOMEM;
++		if (!init_data.devicename) {
++			ret = -ENOMEM;
++			goto err_put_led;
++		}
+ 
+ 		ret = devm_led_classdev_register_ext(dev, l, &init_data);
+ 		kfree(init_data.devicename);
+ 
+ 		if (ret) {
+ 			dev_err(dev, "Failed to init LED %d for port %d", led_num, port);
+-			return ret;
++			goto err_put_led;
+ 		}
+ 	}
+ 
++	fwnode_handle_put(leds);
+ 	return 0;
++
++err_put_led:
++	fwnode_handle_put(led);
++	fwnode_handle_put(leds);
++	return ret;
+ }

+ 1 - 1
target/linux/generic/hack-6.12/711-net-dsa-mv88e6xxx-disable-ATU-violation.patch

@@ -9,7 +9,7 @@ Subject: [PATCH] net/dsa/mv88e6xxx: disable ATU violation
 
 --- a/drivers/net/dsa/mv88e6xxx/chip.c
 +++ b/drivers/net/dsa/mv88e6xxx/chip.c
-@@ -3582,6 +3582,9 @@ static int mv88e6xxx_setup_port(struct m
+@@ -3583,6 +3583,9 @@ static int mv88e6xxx_setup_port(struct m
  	else
  		reg = 1 << port;