]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amd/display: Add NULL pointer checks in dc_stream cursor attribute functions
authorSrinivasan Shanmugam <srinivasan.shanmugam@amd.com>
Wed, 13 Aug 2025 06:44:01 +0000 (12:14 +0530)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 15 Aug 2025 17:06:23 +0000 (13:06 -0400)
The function dc_stream_set_cursor_attributes() currently dereferences
the `stream` pointer and nested members `stream->ctx->dc->current_state`
without checking for NULL.

All callers of these functions, such as in
`dcn30_apply_idle_power_optimizations()` and
`amdgpu_dm_plane_handle_cursor_update()`, already perform NULL checks
before calling these functions.

Fixes below:
drivers/gpu/drm/amd/amdgpu/../display/dc/core/dc_stream.c:336 dc_stream_program_cursor_attributes()
error: we previously assumed 'stream' could be null (see line 334)

drivers/gpu/drm/amd/amdgpu/../display/dc/core/dc_stream.c
    327 bool dc_stream_program_cursor_attributes(
    328         struct dc_stream_state *stream,
    329         const struct dc_cursor_attributes *attributes)
    330 {
    331         struct dc  *dc;
    332         bool reset_idle_optimizations = false;
    333
    334         dc = stream ? stream->ctx->dc : NULL;
                     ^^^^^^
The old code assumed stream could be NULL.

    335
--> 336         if (dc_stream_set_cursor_attributes(stream, attributes)) {
                                                    ^^^^^^
The refactor added an unchecked dereference.

drivers/gpu/drm/amd/amdgpu/../display/dc/core/dc_stream.c
   313  bool dc_stream_set_cursor_attributes(
   314          struct dc_stream_state *stream,
   315          const struct dc_cursor_attributes *attributes)
   316  {
   317          bool result = false;
   318
   319          if (dc_stream_check_cursor_attributes(stream, stream->ctx->dc->current_state, attributes)) {
                                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Here.
This function used to check for if stream as NULL and return false at
the start. Probably we should add that back.

Fixes: 4465dd0e41e8 ("drm/amd/display: Refactor SubVP cursor limiting logic")
Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
Cc: Alex Hung <alex.hung@amd.com>
Cc: Alvin Lee <alvin.lee2@amd.com>
Cc: Ray Wu <ray.wu@amd.com>
Cc: Dillon Varone <dillon.varone@amd.com>
Cc: Aurabindo Pillai <aurabindo.pillai@amd.com>
Cc: Roman Li <roman.li@amd.com>
Cc: ChiaHsuan Chung <chiahsuan.chung@amd.com>
Cc: Harry Wentland <harry.wentland@amd.com>
Cc: Daniel Wheeler <daniel.wheeler@amd.com>
Cc: Tom Chung <chiahsuan.chung@amd.com>
Cc: Wenjing Liu <wenjing.liu@amd.com>
Cc: Jun Lei <Jun.Lei@amd.com>
Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
Reviewed-by: Dillon Varone <Dillon.varone@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/core/dc_stream.c

index 4d6bc9fd4faa80a2aeb9fdb8c6a4f2ede6009704..9ac2d41f8fcae1c5e4a66e003872c95b3e5bff51 100644 (file)
@@ -316,6 +316,9 @@ bool dc_stream_set_cursor_attributes(
 {
        bool result = false;
 
+       if (!stream)
+               return false;
+
        if (dc_stream_check_cursor_attributes(stream, stream->ctx->dc->current_state, attributes)) {
                stream->cursor_attributes = *attributes;
                result = true;
@@ -331,7 +334,10 @@ bool dc_stream_program_cursor_attributes(
        struct dc  *dc;
        bool reset_idle_optimizations = false;
 
-       dc = stream ? stream->ctx->dc : NULL;
+       if (!stream)
+               return false;
+
+       dc = stream->ctx->dc;
 
        if (dc_stream_set_cursor_attributes(stream, attributes)) {
                dc_z10_restore(dc);