Patch "drm/amd/display: Add null check for set_output_gamma in dcn30_set_output_transfer_func" has been added to the 6.1-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    drm/amd/display: Add null check for set_output_gamma in dcn30_set_output_transfer_func

to the 6.1-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     drm-amd-display-add-null-check-for-set_output_gamma-.patch
and it can be found in the queue-6.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 25f82d36ace30e12afbc60dbdac73aba9ec36a0b
Author: Srinivasan Shanmugam <srinivasan.shanmugam@xxxxxxx>
Date:   Mon Jul 22 17:18:17 2024 +0530

    drm/amd/display: Add null check for set_output_gamma in dcn30_set_output_transfer_func
    
    [ Upstream commit 08ae395ea22fb3d9b318c8bde28c0dfd2f5fa4d2 ]
    
    This commit adds a null check for the set_output_gamma function pointer
    in the  dcn30_set_output_transfer_func function. Previously,
    set_output_gamma was being checked for nullity at line 386, but then it
    was being dereferenced without any nullity check at line 401. This
    could potentially lead to a null pointer dereference error if
    set_output_gamma is indeed null.
    
    To fix this, we now ensure that set_output_gamma is not null before
    dereferencing it. We do this by adding a nullity check for
    set_output_gamma before the call to set_output_gamma at line 401. If
    set_output_gamma is null, we log an error message and do not call the
    function.
    
    This fix prevents a potential null pointer dereference error.
    
    drivers/gpu/drm/amd/amdgpu/../display/dc/hwss/dcn30/dcn30_hwseq.c:401 dcn30_set_output_transfer_func()
    error: we previously assumed 'mpc->funcs->set_output_gamma' could be null (see line 386)
    
    drivers/gpu/drm/amd/amdgpu/../display/dc/hwss/dcn30/dcn30_hwseq.c
        373 bool dcn30_set_output_transfer_func(struct dc *dc,
        374                                 struct pipe_ctx *pipe_ctx,
        375                                 const struct dc_stream_state *stream)
        376 {
        377         int mpcc_id = pipe_ctx->plane_res.hubp->inst;
        378         struct mpc *mpc = pipe_ctx->stream_res.opp->ctx->dc->res_pool->mpc;
        379         const struct pwl_params *params = NULL;
        380         bool ret = false;
        381
        382         /* program OGAM or 3DLUT only for the top pipe*/
        383         if (pipe_ctx->top_pipe == NULL) {
        384                 /*program rmu shaper and 3dlut in MPC*/
        385                 ret = dcn30_set_mpc_shaper_3dlut(pipe_ctx, stream);
        386                 if (ret == false && mpc->funcs->set_output_gamma) {
                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ If this is NULL
    
        387                         if (stream->out_transfer_func.type == TF_TYPE_HWPWL)
        388                                 params = &stream->out_transfer_func.pwl;
        389                         else if (pipe_ctx->stream->out_transfer_func.type ==
        390                                         TF_TYPE_DISTRIBUTED_POINTS &&
        391                                         cm3_helper_translate_curve_to_hw_format(
        392                                         &stream->out_transfer_func,
        393                                         &mpc->blender_params, false))
        394                                 params = &mpc->blender_params;
        395                          /* there are no ROM LUTs in OUTGAM */
        396                         if (stream->out_transfer_func.type == TF_TYPE_PREDEFINED)
        397                                 BREAK_TO_DEBUGGER();
        398                 }
        399         }
        400
    --> 401         mpc->funcs->set_output_gamma(mpc, mpcc_id, params);
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Then it will crash
    
        402         return ret;
        403 }
    
    Fixes: d99f13878d6f ("drm/amd/display: Add DCN3 HWSEQ")
    Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
    Cc: Tom Chung <chiahsuan.chung@xxxxxxx>
    Cc: Rodrigo Siqueira <Rodrigo.Siqueira@xxxxxxx>
    Cc: Roman Li <roman.li@xxxxxxx>
    Cc: Hersen Wu <hersenxs.wu@xxxxxxx>
    Cc: Alex Hung <alex.hung@xxxxxxx>
    Cc: Aurabindo Pillai <aurabindo.pillai@xxxxxxx>
    Cc: Harry Wentland <harry.wentland@xxxxxxx>
    Cc: Hamza Mahfooz <hamza.mahfooz@xxxxxxx>
    Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@xxxxxxx>
    Reviewed-by: Tom Chung <chiahsuan.chung@xxxxxxx>
    Signed-off-by: Alex Deucher <alexander.deucher@xxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hwseq.c b/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hwseq.c
index 0225b2c96041d..407f7889e8fd4 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hwseq.c
@@ -215,7 +215,11 @@ bool dcn30_set_output_transfer_func(struct dc *dc,
 		}
 	}
 
-	mpc->funcs->set_output_gamma(mpc, mpcc_id, params);
+	if (mpc->funcs->set_output_gamma)
+		mpc->funcs->set_output_gamma(mpc, mpcc_id, params);
+	else
+		DC_LOG_ERROR("%s: set_output_gamma function pointer is NULL.\n", __func__);
+
 	return ret;
 }
 




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux