media: vidtv: Fix use-after-free in vidtv_bridge_dvb_init()
[platform/kernel/linux-starfive.git] / drivers / media / test-drivers / vidtv / vidtv_bridge.c
index 8262061..dff7265 100644 (file)
@@ -459,26 +459,20 @@ fail_dmx_conn:
        for (j = j - 1; j >= 0; --j)
                dvb->demux.dmx.remove_frontend(&dvb->demux.dmx,
                                               &dvb->dmx_fe[j]);
-fail_dmx_dev:
        dvb_dmxdev_release(&dvb->dmx_dev);
-fail_dmx:
+fail_dmx_dev:
        dvb_dmx_release(&dvb->demux);
+fail_dmx:
+fail_demod_probe:
+       for (i = i - 1; i >= 0; --i) {
+               dvb_unregister_frontend(dvb->fe[i]);
 fail_fe:
-       for (j = i; j >= 0; --j)
-               dvb_unregister_frontend(dvb->fe[j]);
+               dvb_module_release(dvb->i2c_client_tuner[i]);
 fail_tuner_probe:
-       for (j = i; j >= 0; --j)
-               if (dvb->i2c_client_tuner[j])
-                       dvb_module_release(dvb->i2c_client_tuner[j]);
-
-fail_demod_probe:
-       for (j = i; j >= 0; --j)
-               if (dvb->i2c_client_demod[j])
-                       dvb_module_release(dvb->i2c_client_demod[j]);
-
+               dvb_module_release(dvb->i2c_client_demod[i]);
+       }
 fail_adapter:
        dvb_unregister_adapter(&dvb->adapter);
-
 fail_i2c:
        i2c_del_adapter(&dvb->i2c_adapter);