]> git.baikalelectronics.ru Git - kernel.git/commit
drm/radeon: fix potential buffer overflow in ni_set_mc_special_registers()
authorAlexey Kodanev <aleksei.kodanev@bell-sw.com>
Mon, 6 Jun 2022 13:50:54 +0000 (16:50 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 17 Aug 2022 12:23:17 +0000 (14:23 +0200)
commit21ad38acbc18018c098c338eec3dd8184cc1ad46
tree5435f4636a680845c5aa952f69ab7f3e59e7dbf2
parent19a1a2fe00e793ba0ef5ad99b54a40c232e89ae9
drm/radeon: fix potential buffer overflow in ni_set_mc_special_registers()

[ Upstream commit 46f506393bb40c4e2cfbde8dba36f642a180b254 ]

The last case label can write two buffers 'mc_reg_address[j]' and
'mc_data[j]' with 'j' offset equal to SMC_NISLANDS_MC_REGISTER_ARRAY_SIZE
since there are no checks for this value in both case labels after the
last 'j++'.

Instead of changing '>' to '>=' there, add the bounds check at the start
of the second 'case' (the first one already has it).

Also, remove redundant last checks for 'j' index bigger than array size.
The expression is always false. Moreover, before or after the patch
'table->last' can be equal to SMC_NISLANDS_MC_REGISTER_ARRAY_SIZE and it
seems it can be a valid value.

Detected using the static analysis tool - Svace.
Fixes: d6db65a0436f ("drm/radeon/kms: add dpm support for cayman (v5)")
Signed-off-by: Alexey Kodanev <aleksei.kodanev@bell-sw.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/radeon/ni_dpm.c