Check for out of range profile modes and custom params that exceed 8 bits.

Signed-off-by: Lijo Lazar <[email protected]>
---
 drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c 
b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c
index 076e10f26546..649cfad7d36c 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c
@@ -5216,6 +5216,11 @@ static int vega10_set_power_profile_mode(struct pp_hwmgr 
*hwmgr, long *input, ui
        uint8_t min_active_level;
        uint32_t power_profile_mode = input[size];
 
+       if (power_profile_mode > PP_SMC_POWER_PROFILE_CUSTOM) {
+               pr_err("Invalid power profile mode %u\n", power_profile_mode);
+               return -EINVAL;
+       }
+
        if (power_profile_mode == PP_SMC_POWER_PROFILE_CUSTOM) {
                if (size != 0 && size != 4)
                        return -EINVAL;
@@ -5231,6 +5236,10 @@ static int vega10_set_power_profile_mode(struct pp_hwmgr 
*hwmgr, long *input, ui
                                return -EINVAL;
                }
 
+               if ((input[0] & ~0xFF) || (input[1] & ~0xFF) ||
+                   (input[2] & ~0xFF) || (input[3] & ~0xFF))
+                       return -EINVAL;
+
                data->custom_profile_mode[0] = busy_set_point = input[0];
                data->custom_profile_mode[1] = FPS = input[1];
                data->custom_profile_mode[2] = use_rlc_busy = input[2];
-- 
2.49.0

Reply via email to