[PATCH] media: dvb-usb: fix refcount leak in dvb_usb_adapter_frontend_init()

From: Wentao Liang

Date: Tue Jun 09 2026 - 00:03:55 EST


After all frontends are registered via dvb_register_frontend(),
if dvb_create_media_graph() or dvb_usb_media_device_register()
fails, the function returns directly without calling
dvb_unregister_frontend() and dvb_frontend_detach() for each
frontend. This leaves them with a leaked reference count.

The caller's error path calls dvb_usb_adapter_dvb_exit() which
does not handle frontend cleanup. Add the missing cleanup by
calling dvb_usb_adapter_frontend_exit() on the error path.

Fixes: 9f80679511b0 ("[media] usb: check media device errors")
Cc: stable@xxxxxxxxxxxxxxx
Signed-off-by: Wentao Liang <vulab@xxxxxxxxxxx>
---
drivers/media/usb/dvb-usb/dvb-usb-dvb.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/media/usb/dvb-usb/dvb-usb-dvb.c b/drivers/media/usb/dvb-usb/dvb-usb-dvb.c
index 029dad86a059..923f25ccb1e8 100644
--- a/drivers/media/usb/dvb-usb/dvb-usb-dvb.c
+++ b/drivers/media/usb/dvb-usb/dvb-usb-dvb.c
@@ -326,10 +326,16 @@ int dvb_usb_adapter_frontend_init(struct dvb_usb_adapter *adap)

ret = dvb_create_media_graph(&adap->dvb_adap, true);
if (ret)
- return ret;
+ goto err_fe_cleanup;

ret = dvb_usb_media_device_register(adap);
+ if (ret)
+ goto err_fe_cleanup;
+
+ return ret;

+err_fe_cleanup:
+ dvb_usb_adapter_frontend_exit(adap);
return ret;
}

--
2.34.1