aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorImre Deak <imre.deak@intel.com>2017-07-19 07:43:28 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2017-07-20 04:20:30 -0400
commit448421b5e93b9177c5698f0cf6f5e72d2995eeca (patch)
tree23b816082fe2fcb27527d5a48a629c91cd884227
parentef434a0c2ce765ad33026375db7d23aebd5e9532 (diff)
drm/mst: Fix error handling during MST sideband message reception
Handle any error due to partial reads, timeouts etc. to avoid parsing uninitialized data subsequently. Also bail out if the parsing itself fails. Cc: Dave Airlie <airlied@redhat.com> Cc: Lyude <lyude@redhat.com> Cc: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Imre Deak <imre.deak@intel.com> Reviewed-by: Lyude <lyude@redhat.com> Cc: stable@vger.kernel.org Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: https://patchwork.freedesktop.org/patch/msgid/20170719114330.26540-2-imre.deak@intel.com
-rw-r--r--drivers/gpu/drm/drm_dp_mst_topology.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c
index bfd237c15e76..ce0e58442939 100644
--- a/drivers/gpu/drm/drm_dp_mst_topology.c
+++ b/drivers/gpu/drm/drm_dp_mst_topology.c
@@ -2196,11 +2196,17 @@ static void drm_dp_get_one_sb_msg(struct drm_dp_mst_topology_mgr *mgr, bool up)
2196 ret = drm_dp_dpcd_read(mgr->aux, basereg + curreply, 2196 ret = drm_dp_dpcd_read(mgr->aux, basereg + curreply,
2197 replyblock, len); 2197 replyblock, len);
2198 if (ret != len) { 2198 if (ret != len) {
2199 DRM_DEBUG_KMS("failed to read a chunk\n"); 2199 DRM_DEBUG_KMS("failed to read a chunk (len %d, ret %d)\n",
2200 len, ret);
2201 return;
2200 } 2202 }
2203
2201 ret = drm_dp_sideband_msg_build(msg, replyblock, len, false); 2204 ret = drm_dp_sideband_msg_build(msg, replyblock, len, false);
2202 if (ret == false) 2205 if (!ret) {
2203 DRM_DEBUG_KMS("failed to build sideband msg\n"); 2206 DRM_DEBUG_KMS("failed to build sideband msg\n");
2207 return;
2208 }
2209
2204 curreply += len; 2210 curreply += len;
2205 replylen -= len; 2211 replylen -= len;
2206 } 2212 }