From: Harry Wentland <[email protected]>

dm_dp_mst_get_modes() uses drm_connector->index to index the
per-connector HDCP arrays in struct hdcp_workqueue. Those arrays are
sized to AMDGPU_DM_MAX_DISPLAY_COUNT, which matches the DRM connector
index range (0..31). Add a defensive bounds check so that, should the
DRM connector index range ever grow beyond the array size, the access
is skipped instead of reading and writing out of bounds.

Assisted-by: Copilot:claude-opus-4.8
Reviewed-by: Alex Hung <[email protected]>
Signed-off-by: Harry Wentland <[email protected]>
Signed-off-by: Roman Li <[email protected]>
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
index e001d868db80..045a7f88b754 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
@@ -485,7 +485,8 @@ static int dm_dp_mst_get_modes(struct drm_connector 
*connector)
                        struct drm_device *dev = connector->dev;
                        struct amdgpu_device *adev = drm_to_adev(dev);
 
-                       if (adev->dm.hdcp_workqueue) {
+                       if (adev->dm.hdcp_workqueue &&
+                           connector->index < AMDGPU_DM_MAX_DISPLAY_COUNT) {
                                struct hdcp_workqueue *hdcp_work = 
adev->dm.hdcp_workqueue;
                                struct hdcp_workqueue *hdcp_w =
                                        
&hdcp_work[aconnector->dc_link->link_index];
-- 
2.34.1

Reply via email to