[PATCH] eisa: virtual_root: fix reference leak on platform_device_register() failure
From: Guangshuo Li
Date: Mon Apr 13 2026 - 12:00:48 EST
virtual_eisa_root_init() returns immediately when
platform_device_register(&eisa_root_dev) fails.
The call flow is:
virtual_eisa_root_init()
-> platform_device_register(&eisa_root_dev)
-> device_initialize(&eisa_root_dev.dev)
-> platform_device_add(&eisa_root_dev)
If platform_device_add() fails, virtual_eisa_root_init() returns the
error directly without dropping the device reference acquired by
device_initialize(), leading to a reference leak.
The issue was identified by a static analysis tool I developed and
confirmed by manual review. Fix this by calling platform_device_put()
when platform_device_register() fails.
Cc: stable@xxxxxxxxxxxxxxx
Signed-off-by: Guangshuo Li <lgs201920130244@xxxxxxxxx>
---
drivers/eisa/virtual_root.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/eisa/virtual_root.c b/drivers/eisa/virtual_root.c
index cd9515d9d8f0..93261d2e3532 100644
--- a/drivers/eisa/virtual_root.c
+++ b/drivers/eisa/virtual_root.c
@@ -50,8 +50,11 @@ static int __init virtual_eisa_root_init (void)
{
int r;
- if ((r = platform_device_register (&eisa_root_dev)))
+ r = platform_device_register(&eisa_root_dev);
+ if (r) {
+ platform_device_put(&eisa_root_dev);
return r;
+ }
eisa_bus_root.force_probe = force_probe;
--
2.43.0