]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amd/display: Ensure index calculation will not overflow
authorAlex Hung <alex.hung@amd.com>
Wed, 24 Apr 2024 23:08:04 +0000 (17:08 -0600)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 2 May 2024 20:18:18 +0000 (16:18 -0400)
[WHY & HOW]
Make sure vmid0p72_idx, vnom0p8_idx and vmax0p9_idx calculation will
never overflow and exceess array size.

This fixes 3 OVERRUN and 1 INTEGER_OVERFLOW issues reported by Coverity.

Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Acked-by: Tom Chung <chiahsuan.chung@amd.com>
Signed-off-by: Alex Hung <alex.hung@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dml/calcs/dcn_calcs.c

index 0c4a8fe8e5ca6249417e5975dc61372f4d1fbdb6..f1cde1e4265f3dc75268409743947e4f05162580 100644 (file)
@@ -1453,10 +1453,9 @@ void dcn_bw_update_from_pplib_fclks(
        ASSERT(fclks->num_levels);
 
        vmin0p65_idx = 0;
-       vmid0p72_idx = fclks->num_levels -
-               (fclks->num_levels > 2 ? 3 : (fclks->num_levels > 1 ? 2 : 1));
-       vnom0p8_idx = fclks->num_levels - (fclks->num_levels > 1 ? 2 : 1);
-       vmax0p9_idx = fclks->num_levels - 1;
+       vmid0p72_idx = fclks->num_levels > 2 ? fclks->num_levels - 3 : 0;
+       vnom0p8_idx = fclks->num_levels > 1 ? fclks->num_levels - 2 : 0;
+       vmax0p9_idx = fclks->num_levels > 0 ? fclks->num_levels - 1 : 0;
 
        dc->dcn_soc->fabric_and_dram_bandwidth_vmin0p65 =
                32 * (fclks->data[vmin0p65_idx].clocks_in_khz / 1000.0) / 1000.0;