aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
authorPavel Zhigulin <Pavel.Zhigulin@kaspersky.com>2025-11-13 16:57:44 +0300
committerJakub Kicinski <kuba@kernel.org>2025-11-14 17:46:32 -0800
commite6751b0b19a6baab219a62e1e302b8aa6b5a55b2 (patch)
tree9e0fb96edbd5b46a6db75b5cc34d37cbc1957051
parentmlxsw: spectrum: Fix memory leak in mlxsw_sp_flower_stats() (diff)
downloadwireguard-linux-e6751b0b19a6baab219a62e1e302b8aa6b5a55b2.tar.xz
wireguard-linux-e6751b0b19a6baab219a62e1e302b8aa6b5a55b2.zip
net: dsa: hellcreek: fix missing error handling in LED registration
The LED setup routine registered both led_sync_good and led_is_gm devices without checking the return values of led_classdev_register(). If either registration failed, the function continued silently, leaving the driver in a partially-initialized state and leaking a registered LED classdev. Add proper error handling Fixes: 7d9ee2e8ff15 ("net: dsa: hellcreek: Add PTP status LEDs") Signed-off-by: Pavel Zhigulin <Pavel.Zhigulin@kaspersky.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Acked-by: Kurt Kanzenbach <kurt@linutronix.de> Link: https://patch.msgid.link/20251113135745.92375-1-Pavel.Zhigulin@kaspersky.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-rw-r--r--drivers/net/dsa/hirschmann/hellcreek_ptp.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/net/dsa/hirschmann/hellcreek_ptp.c b/drivers/net/dsa/hirschmann/hellcreek_ptp.c
index bfe21f9f7dcd..cb23bea9c21b 100644
--- a/drivers/net/dsa/hirschmann/hellcreek_ptp.c
+++ b/drivers/net/dsa/hirschmann/hellcreek_ptp.c
@@ -376,8 +376,18 @@ static int hellcreek_led_setup(struct hellcreek *hellcreek)
hellcreek_set_brightness(hellcreek, STATUS_OUT_IS_GM, 1);
/* Register both leds */
- led_classdev_register(hellcreek->dev, &hellcreek->led_sync_good);
- led_classdev_register(hellcreek->dev, &hellcreek->led_is_gm);
+ ret = led_classdev_register(hellcreek->dev, &hellcreek->led_sync_good);
+ if (ret) {
+ dev_err(hellcreek->dev, "Failed to register sync_good LED\n");
+ goto out;
+ }
+
+ ret = led_classdev_register(hellcreek->dev, &hellcreek->led_is_gm);
+ if (ret) {
+ dev_err(hellcreek->dev, "Failed to register is_gm LED\n");
+ led_classdev_unregister(&hellcreek->led_sync_good);
+ goto out;
+ }
ret = 0;