[PATCH] drm/amd/display: avoid amdgpu_crtc dereference before crtc check

Alexey Kodanev aleksei.kodanev at bell-sw.com
Wed Nov 22 15:15:25 UTC 2023


'amdgpu_crtc' is set with 'container_of(crtc, ...)', and at
the same time 'crtc' ptr is checked for NULL before and after
'amdgpu_crtc' dereference in args passed to drm_dbg_atomic():

  * when setting 'struct dm_crtc_state *crtc_state'
  * inside amdgpu_dm_plane_get_cursor_position(), the function
    doesn't set position.enable when crtc is NULL.

Considering all this, it is safer to move drm_dbg_atomic() after
'position.enable' check. It can guarantee that 'crtc' is valid
and that 'amdgpu_crtc' also has a valid pointer.

Detected using the static analysis tool - Svace.

Signed-off-by: Alexey Kodanev <aleksei.kodanev at bell-sw.com>
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
index 116121e647ca..47d8d569d9eb 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
@@ -1242,10 +1242,6 @@ void amdgpu_dm_plane_handle_cursor_update(struct drm_plane *plane,
 	if (!plane->state->fb && !old_plane_state->fb)
 		return;
 
-	drm_dbg_atomic(plane->dev, "crtc_id=%d with size %d to %d\n",
-		       amdgpu_crtc->crtc_id, plane->state->crtc_w,
-		       plane->state->crtc_h);
-
 	ret = amdgpu_dm_plane_get_cursor_position(plane, crtc, &position);
 	if (ret)
 		return;
@@ -1261,6 +1257,10 @@ void amdgpu_dm_plane_handle_cursor_update(struct drm_plane *plane,
 		return;
 	}
 
+	drm_dbg_atomic(plane->dev, "crtc_id=%d with size %d to %d\n",
+		       amdgpu_crtc->crtc_id, plane->state->crtc_w,
+		       plane->state->crtc_h);
+
 	amdgpu_crtc->cursor_width = plane->state->crtc_w;
 	amdgpu_crtc->cursor_height = plane->state->crtc_h;
 
-- 
2.25.1



More information about the amd-gfx mailing list