]> 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>
Thu, 25 Aug 2022 09:17:38 +0000 (11:17 +0200)
commitd4b41b0f7979e53d3b91d4fc797d1dccac18eeb3
treed492dd3c68fc95f816e040b5759369254924f49b
parentd47709c2ed0254a001c59b6de3a5cc1fa687bfbd
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