From: Ma Jun <jun....@amd.com>

[ Upstream commit df0a9bd92fbbd3fcafcb2bce6463c9228a3e6868 ]

Check the input value for CUSTOM profile mode setting on legacy
SOCs. Otherwise we may use uninitalized value of input[]

Signed-off-by: Ma Jun <jun....@amd.com>
Reviewed-by: Yang Wang <kevinyang.w...@amd.com>
Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c   | 2 +-
 drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c | 8 ++++++--
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c 
b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c
index 7931528bc864b..7e1bf5561f559 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c
@@ -5187,7 +5187,7 @@ static int smu7_set_power_profile_mode(struct pp_hwmgr 
*hwmgr, long *input, uint
        mode = input[size];
        switch (mode) {
        case PP_SMC_POWER_PROFILE_CUSTOM:
-               if (size < 8 && size != 0)
+               if (size != 8 && size != 0)
                        return -EINVAL;
                /* If only CUSTOM is passed in, use the saved values. Check
                 * that we actually have a CUSTOM profile by ensuring that
diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c 
b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c
index 57a354a03e8ae..a55dc6ec4f766 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c
@@ -4095,9 +4095,11 @@ static int vega20_set_power_profile_mode(struct pp_hwmgr 
*hwmgr, long *input, ui
        if (power_profile_mode == PP_SMC_POWER_PROFILE_CUSTOM) {
                struct vega20_hwmgr *data =
                        (struct vega20_hwmgr *)(hwmgr->backend);
-               if (size == 0 && !data->is_custom_profile_set)
+
+               if (size != 10 && size != 0)
                        return -EINVAL;
-               if (size < 10 && size != 0)
+
+               if (size == 0 && !data->is_custom_profile_set)
                        return -EINVAL;
 
                result = vega20_get_activity_monitor_coeff(hwmgr,
@@ -4159,6 +4161,8 @@ static int vega20_set_power_profile_mode(struct pp_hwmgr 
*hwmgr, long *input, ui
                        activity_monitor.Fclk_PD_Data_error_coeff = input[8];
                        activity_monitor.Fclk_PD_Data_error_rate_coeff = 
input[9];
                        break;
+               default:
+                       return -EINVAL;
                }
 
                result = vega20_set_activity_monitor_coeff(hwmgr,
-- 
2.43.0

Reply via email to