From: Guangshuo Li Date: Wed, 15 Apr 2026 17:05:15 +0000 (+0800) Subject: parisc: led: fix reference leak on failed device registration X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=707610bcccbd0327530938e33f3f33211a640a4e;p=thirdparty%2Fkernel%2Flinux.git parisc: led: fix reference leak on failed device registration When platform_device_register() fails in startup_leds(), the embedded struct device in platform_leds has already been initialized by device_initialize(), but the failure path only reports the error and does not drop the device reference for the current platform device: startup_leds() -> platform_device_register(&platform_leds) -> device_initialize(&platform_leds.dev) -> setup_pdev_dma_masks(&platform_leds) -> platform_device_add(&platform_leds) This leads to a reference leak when platform_device_register() fails. Fix this by calling platform_device_put() after reporting the error. The issue was identified by a static analysis tool I developed and confirmed by manual review. Fixes: 789e527adfc33 ("parisc: led: Rewrite LED/LCD driver to utilizize Linux LED subsystem") Cc: stable@vger.kernel.org Signed-off-by: Guangshuo Li Signed-off-by: Helge Deller --- diff --git a/drivers/parisc/led.c b/drivers/parisc/led.c index 016c9d5a60a8a..b299fcc48b087 100644 --- a/drivers/parisc/led.c +++ b/drivers/parisc/led.c @@ -543,8 +543,10 @@ static void __init register_led_regions(void) static int __init startup_leds(void) { - if (platform_device_register(&platform_leds)) - printk(KERN_INFO "LED: failed to register LEDs\n"); + if (platform_device_register(&platform_leds)) { + pr_info("LED: failed to register LEDs\n"); + platform_device_put(&platform_leds); + } register_led_regions(); return 0; }