On Wed Apr 15 23:28:26 2026 +0800, Guangshuo Li wrote:
> When platform_device_register() fails in vidtv_bridge_init(), the
> embedded struct device in vidtv_bridge_dev has already been initialized
> by device_initialize(), but the failure path returns the error without
> dropping the device reference for the current platform device:
> 
>   vidtv_bridge_init()
>     -> platform_device_register(&vidtv_bridge_dev)
>        -> device_initialize(&vidtv_bridge_dev.dev)
>        -> setup_pdev_dma_masks(&vidtv_bridge_dev)
>        -> platform_device_add(&vidtv_bridge_dev)
> 
> This leads to a reference leak when platform_device_register() fails.
> Fix this by calling platform_device_put() before returning the error.
> 
> The issue was identified by a static analysis tool I developed and
> confirmed by manual review.
> 
> Fixes: f90cf6079bf67 ("media: vidtv: add a bridge driver")
> Cc: [email protected]
> Signed-off-by: Guangshuo Li <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/test-drivers/vidtv/vidtv_bridge.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

---

diff --git a/drivers/media/test-drivers/vidtv/vidtv_bridge.c 
b/drivers/media/test-drivers/vidtv/vidtv_bridge.c
index a8a76434989c..fd69b4ee16f4 100644
--- a/drivers/media/test-drivers/vidtv/vidtv_bridge.c
+++ b/drivers/media/test-drivers/vidtv/vidtv_bridge.c
@@ -594,8 +594,10 @@ static int __init vidtv_bridge_init(void)
        int ret;
 
        ret = platform_device_register(&vidtv_bridge_dev);
-       if (ret)
+       if (ret) {
+               platform_device_put(&vidtv_bridge_dev);
                return ret;
+       }
 
        ret = platform_driver_register(&vidtv_bridge_driver);
        if (ret)
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to