]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/i915/dp_mst: Fix error handling while adding a connector
authorImre Deak <imre.deak@intel.com>
Wed, 8 Jan 2025 15:19:12 +0000 (17:19 +0200)
committerImre Deak <imre.deak@intel.com>
Wed, 22 Jan 2025 17:06:56 +0000 (19:06 +0200)
After an error during adding an MST connector the MST port and the
intel_connector object could be leaked, fix this up.

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250108151916.491113-2-imre.deak@intel.com
drivers/gpu/drm/i915/display/intel_dp_mst.c

index 0c44fc7dd86cef471df5787e8284d9313b98b215..85aafdf573e8053c1dfdc04c9799b116c006d85b 100644 (file)
@@ -1717,11 +1717,8 @@ mst_topology_add_connector(struct drm_dp_mst_topology_mgr *mgr,
 
        ret = drm_connector_dynamic_init(display->drm, connector, &mst_connector_funcs,
                                         DRM_MODE_CONNECTOR_DisplayPort, NULL);
-       if (ret) {
-               drm_dp_mst_put_port_malloc(port);
-               intel_connector_free(intel_connector);
-               return NULL;
-       }
+       if (ret)
+               goto err_put_port;
 
        intel_connector->dp.dsc_decompression_aux = drm_dp_mst_dsc_aux_for_port(port);
        intel_dp_mst_read_decompression_port_dsc_caps(intel_dp, intel_connector);
@@ -1736,12 +1733,12 @@ mst_topology_add_connector(struct drm_dp_mst_topology_mgr *mgr,
 
                ret = drm_connector_attach_encoder(&intel_connector->base, enc);
                if (ret)
-                       goto err;
+                       goto err_cleanup_connector;
        }
 
        ret = mst_topology_add_connector_properties(intel_dp, connector, pathprop);
        if (ret)
-               goto err;
+               goto err_cleanup_connector;
 
        ret = intel_dp_hdcp_init(dig_port, intel_connector);
        if (ret)
@@ -1750,8 +1747,12 @@ mst_topology_add_connector(struct drm_dp_mst_topology_mgr *mgr,
 
        return connector;
 
-err:
+err_cleanup_connector:
        drm_connector_cleanup(connector);
+err_put_port:
+       drm_dp_mst_put_port_malloc(port);
+       intel_connector_free(intel_connector);
+
        return NULL;
 }