From 9c998912148d934d27ec60222e32e9735b7ecee8 Mon Sep 17 00:00:00 2001 From: Guangshuo Li Date: Thu, 16 Apr 2026 02:16:35 +0800 Subject: [PATCH] soc: microchip: mpfs-sys-controller: fix reference leak on failed device registration When platform_device_register() fails in mpfs_sys_controller_probe(), the embedded struct device in subdevs[i] 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: mpfs_sys_controller_probe() -> platform_device_register(&subdevs[i]) -> device_initialize(&subdevs[i].dev) -> setup_pdev_dma_masks(&subdevs[i]) -> platform_device_add(&subdevs[i]) 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: d0054a470c339 ("soc: add microchip polarfire soc system controller") Cc: stable@vger.kernel.org Signed-off-by: Guangshuo Li Signed-off-by: Linux RISC-V bot --- drivers/soc/microchip/mpfs-sys-controller.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/soc/microchip/mpfs-sys-controller.c b/drivers/soc/microchip/mpfs-sys-controller.c index 10b2fc39da66cf..404c31daf45942 100644 --- a/drivers/soc/microchip/mpfs-sys-controller.c +++ b/drivers/soc/microchip/mpfs-sys-controller.c @@ -168,8 +168,10 @@ static int mpfs_sys_controller_probe(struct platform_device *pdev) for (i = 0; i < ARRAY_SIZE(subdevs); i++) { subdevs[i].dev.parent = dev; - if (platform_device_register(&subdevs[i])) + if (platform_device_register(&subdevs[i])) { dev_warn(dev, "Error registering sub device %s\n", subdevs[i].name); + platform_device_put(&subdevs[i]); + } } dev_info(&pdev->dev, "Registered MPFS system controller\n");