From: jsg Date: Mon, 9 Sep 2024 08:52:26 +0000 (+0000) Subject: drm/amd/display: Check msg_id before processing transcation X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=c34fa54ff251edfa52610f4570dc94be11d3cfe3;p=openbsd drm/amd/display: Check msg_id before processing transcation From Alex Hung cb63090a17d3abb87f132851fa3711281249b7d2 in linux-6.6.y/6.6.50 fa71face755e27dc44bc296416ebdf2c67163316 in mainline linux --- diff --git a/sys/dev/pci/drm/amd/display/dc/hdcp/hdcp_msg.c b/sys/dev/pci/drm/amd/display/dc/hdcp/hdcp_msg.c index f26325ac970..0440688a6e6 100644 --- a/sys/dev/pci/drm/amd/display/dc/hdcp/hdcp_msg.c +++ b/sys/dev/pci/drm/amd/display/dc/hdcp/hdcp_msg.c @@ -130,13 +130,21 @@ static bool hdmi_14_process_transaction( const uint8_t hdcp_i2c_addr_link_primary = 0x3a; /* 0x74 >> 1*/ const uint8_t hdcp_i2c_addr_link_secondary = 0x3b; /* 0x76 >> 1*/ struct i2c_command i2c_command; - uint8_t offset = hdcp_i2c_offsets[message_info->msg_id]; + uint8_t offset; struct i2c_payload i2c_payloads[] = { - { true, 0, 1, &offset }, + { true, 0, 1, 0 }, /* actual hdcp payload, will be filled later, zeroed for now*/ { 0 } }; + if (message_info->msg_id == HDCP_MESSAGE_ID_INVALID) { + DC_LOG_ERROR("%s: Invalid message_info msg_id - %d\n", __func__, message_info->msg_id); + return false; + } + + offset = hdcp_i2c_offsets[message_info->msg_id]; + i2c_payloads[0].data = &offset; + switch (message_info->link) { case HDCP_LINK_SECONDARY: i2c_payloads[0].address = hdcp_i2c_addr_link_secondary; @@ -310,6 +318,11 @@ static bool dp_11_process_transaction( struct dc_link *link, struct hdcp_protection_message *message_info) { + if (message_info->msg_id == HDCP_MESSAGE_ID_INVALID) { + DC_LOG_ERROR("%s: Invalid message_info msg_id - %d\n", __func__, message_info->msg_id); + return false; + } + return dpcd_access_helper( link, message_info->length,