]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/amd: Fix an out of bounds error in BIOS parser
authorMario Limonciello <mario.limonciello@amd.com>
Thu, 23 Mar 2023 19:07:06 +0000 (14:07 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 24 May 2023 16:32:36 +0000 (17:32 +0100)
[ Upstream commit d116db180decec1b21bba31d2ff495ac4d8e1b83 ]

The array is hardcoded to 8 in atomfirmware.h, but firmware provides
a bigger one sometimes. Deferencing the larger array causes an out
of bounds error.

commit 4fc1ba4aa589 ("drm/amd/display: fix array index out of bound error
in bios parser") fixed some of this, but there are two other cases
not covered by it.  Fix those as well.

Reported-by: erhard_f@mailbox.org
Link: https://bugzilla.kernel.org/show_bug.cgi?id=214853
Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2473
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c

index 074e70a5c458e3e304cc0f9ba35747d57b59ec2c..e507d2e1410b76b2fc132bc6643f0e59faa9f1de 100644 (file)
@@ -516,11 +516,8 @@ static enum bp_result get_gpio_i2c_info(
        info->i2c_slave_address = record->i2c_slave_addr;
 
        /* TODO: check how to get register offset for en, Y, etc. */
-       info->gpio_info.clk_a_register_index =
-                       le16_to_cpu(
-                       header->gpio_pin[table_index].data_a_reg_index);
-       info->gpio_info.clk_a_shift =
-                       header->gpio_pin[table_index].gpio_bitshift;
+       info->gpio_info.clk_a_register_index = le16_to_cpu(pin->data_a_reg_index);
+       info->gpio_info.clk_a_shift = pin->gpio_bitshift;
 
        return BP_RESULT_OK;
 }