plat/arm: css: Sanitize the input to css_validate_power_state
authorNariman Poushin <nariman.poushin@linaro.org>
Tue, 1 May 2018 12:07:47 +0000 (13:07 +0100)
committerNariman Poushin <nariman.poushin@linaro.org>
Sat, 23 Jun 2018 16:25:40 +0000 (17:25 +0100)
In the case of the platform max power level being less than the system
power level, make sure to not overrun the array of power states.

This fixes Coverity Scan OVERRUN defect CID 267021.

Change-Id: I52646ab9be2fceeb5c331b5dad7a6267991f4197
Signed-off-by: Nariman Poushin <nariman.poushin@linaro.org>
plat/arm/css/common/css_pm.c

index 986cb0846e64f5e38c665a2312ad610ae1753068..4735a9dccab5361fa5c04abed3c2e4682f7c61c9 100644 (file)
@@ -263,12 +263,24 @@ static int css_validate_power_state(unsigned int power_state,
        int rc;
        rc = arm_validate_power_state(power_state, req_state);
 
+       /*
+        * Ensure that we don't overrun the pwr_domain_state array in the case
+        * where the platform supported max power level is less than the system
+        * power level
+        */
+
+#if (PLAT_MAX_PWR_LVL == CSS_SYSTEM_PWR_DMN_LVL)
+
        /*
         * Ensure that the system power domain level is never suspended
         * via PSCI CPU SUSPEND API. Currently system suspend is only
         * supported via PSCI SYSTEM SUSPEND API.
         */
-       req_state->pwr_domain_state[CSS_SYSTEM_PWR_DMN_LVL] = ARM_LOCAL_STATE_RUN;
+
+       req_state->pwr_domain_state[CSS_SYSTEM_PWR_DMN_LVL] =
+                                                       ARM_LOCAL_STATE_RUN;
+#endif
+
        return rc;
 }