[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