|
@@ -1672,13 +1672,19 @@ static int drm_dp_payload_send_msg(struct drm_dp_mst_topology_mgr *mgr,
|
|
u8 sinks[DRM_DP_MAX_SDP_STREAMS];
|
|
u8 sinks[DRM_DP_MAX_SDP_STREAMS];
|
|
int i;
|
|
int i;
|
|
|
|
|
|
|
|
+ port = drm_dp_get_validated_port_ref(mgr, port);
|
|
|
|
+ if (!port)
|
|
|
|
+ return -EINVAL;
|
|
|
|
+
|
|
port_num = port->port_num;
|
|
port_num = port->port_num;
|
|
mstb = drm_dp_get_validated_mstb_ref(mgr, port->parent);
|
|
mstb = drm_dp_get_validated_mstb_ref(mgr, port->parent);
|
|
if (!mstb) {
|
|
if (!mstb) {
|
|
mstb = drm_dp_get_last_connected_port_and_mstb(mgr, port->parent, &port_num);
|
|
mstb = drm_dp_get_last_connected_port_and_mstb(mgr, port->parent, &port_num);
|
|
|
|
|
|
- if (!mstb)
|
|
|
|
|
|
+ if (!mstb) {
|
|
|
|
+ drm_dp_put_port(port);
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
txmsg = kzalloc(sizeof(*txmsg), GFP_KERNEL);
|
|
txmsg = kzalloc(sizeof(*txmsg), GFP_KERNEL);
|
|
@@ -1707,6 +1713,7 @@ static int drm_dp_payload_send_msg(struct drm_dp_mst_topology_mgr *mgr,
|
|
kfree(txmsg);
|
|
kfree(txmsg);
|
|
fail_put:
|
|
fail_put:
|
|
drm_dp_put_mst_branch_device(mstb);
|
|
drm_dp_put_mst_branch_device(mstb);
|
|
|
|
+ drm_dp_put_port(port);
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|