drm/amd/display: Check index msg_id before read or write
authorAlex Hung <alex.hung@amd.com>
Thu, 18 Apr 2024 19:27:43 +0000 (13:27 -0600)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 26 Apr 2024 21:22:43 +0000 (17:22 -0400)
[WHAT]
msg_id is used as an array index and it cannot be a negative value, and
therefore cannot be equal to MOD_HDCP_MESSAGE_ID_INVALID (-1).

[HOW]
Check whether msg_id is valid before reading and setting.

This fixes 4 OVERRUN issues reported by Coverity.

Reviewed-by: Rodrigo Siqueira <rodrigo.siqueira@amd.com>
Acked-by: Wayne Lin <wayne.lin@amd.com>
Signed-off-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/modules/hdcp/hdcp_ddc.c

index f7b5583ee609a5bbb0b86498050fd229ea2416c5..8e9caae7c9559f300e63153cda73f795de9c0b79 100644 (file)
@@ -156,6 +156,10 @@ static enum mod_hdcp_status read(struct mod_hdcp *hdcp,
        uint32_t cur_size = 0;
        uint32_t data_offset = 0;
 
+       if (msg_id == MOD_HDCP_MESSAGE_ID_INVALID) {
+               return MOD_HDCP_STATUS_DDC_FAILURE;
+       }
+
        if (is_dp_hdcp(hdcp)) {
                while (buf_len > 0) {
                        cur_size = MIN(buf_len, HDCP_MAX_AUX_TRANSACTION_SIZE);
@@ -215,6 +219,10 @@ static enum mod_hdcp_status write(struct mod_hdcp *hdcp,
        uint32_t cur_size = 0;
        uint32_t data_offset = 0;
 
+       if (msg_id == MOD_HDCP_MESSAGE_ID_INVALID) {
+               return MOD_HDCP_STATUS_DDC_FAILURE;
+       }
+
        if (is_dp_hdcp(hdcp)) {
                while (buf_len > 0) {
                        cur_size = MIN(buf_len, HDCP_MAX_AUX_TRANSACTION_SIZE);