]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: dsa: hellcreek: fix missing error handling in LED registration
authorPavel Zhigulin <Pavel.Zhigulin@kaspersky.com>
Thu, 13 Nov 2025 13:57:44 +0000 (16:57 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 6 Dec 2025 21:12:38 +0000 (06:12 +0900)
[ Upstream commit e6751b0b19a6baab219a62e1e302b8aa6b5a55b2 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/dsa/hirschmann/hellcreek_ptp.c

index b28baab6d56a17bcc1bb44846aefcbcdff4a08d4..763666480a8a8ee2d9e884b92f6f42cacec2dfde 100644 (file)
@@ -367,8 +367,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;