diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 0f835d15c18be9a2235384ae38b11998a1e03321..aed363cabe07fb6de3cd8f02b0cffd5f41382180 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -1356,8 +1356,10 @@ void intel_ddi_init(struct drm_device *dev, enum port port)
 	intel_encoder->cloneable = false;
 	intel_encoder->hot_plug = intel_ddi_hot_plug;
 
-	if (!intel_dp_init_connector(intel_dig_port, dp_connector))
+	if (!intel_dp_init_connector(intel_dig_port, dp_connector)) {
+		kfree(dp_connector);
 		return;
+	}
 
 	if (intel_encoder->type != INTEL_OUTPUT_EDP) {
 		hdmi_connector = kzalloc(sizeof(struct intel_connector),
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 1a429cf55291a21257366b1b963bb4cbfbb9a8bb..5ba0a612d4632b0b29a06735cf869b98505270e0 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -2987,7 +2987,6 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
 		/* if this fails, presume the device is a ghost */
 		DRM_INFO("failed to retrieve link info, disabling eDP\n");
 		intel_dp_encoder_destroy(&intel_dig_port->base.base);
-		intel_dp_destroy(connector);
 		return false;
 	}
 
@@ -3146,8 +3145,11 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
 
 	intel_dp_i2c_init(intel_dp, intel_connector, name);
 
-	if (!intel_edp_init_connector(intel_dp, intel_connector))
+	if (!intel_edp_init_connector(intel_dp, intel_connector)) {
+		drm_sysfs_connector_remove(connector);
+		drm_connector_cleanup(connector);
 		return false;
+	}
 
 	intel_dp_add_properties(intel_dp, connector);
 
@@ -3206,5 +3208,6 @@ intel_dp_init(struct drm_device *dev, int output_reg, enum port port)
 	intel_encoder->cloneable = false;
 	intel_encoder->hot_plug = intel_dp_hot_plug;
 
-	intel_dp_init_connector(intel_dig_port, intel_connector);
+	if (!intel_dp_init_connector(intel_dig_port, intel_connector))
+		kfree(intel_connector);
 }