Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 52290c9c authored by Adam Lesinski's avatar Adam Lesinski
Browse files

Fix Array Index Out of Bounds in BatteryStatsImpl

If the power profile was not set yet, the default sizes of
cpu freq arrays could have been too small.

Bug:24244089
Change-Id: Ic17a1e8f2058c51fbdda14db35b7b62f4880be00
parent 88f92ec5
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -8044,6 +8044,10 @@ public final class BatteryStatsImpl extends BatteryStats {
     * wakelocks. If the screen is on, we just assign the actual cpu time an app used.
     */
    public void updateCpuTimeLocked() {
        if (mPowerProfile == null) {
            return;
        }

        if (DEBUG_ENERGY_CPU) {
            Slog.d(TAG, "!Cpu updating!");
        }
@@ -8131,14 +8135,19 @@ public final class BatteryStatsImpl extends BatteryStats {

                        // Add the cpu speeds to this UID. These are used as a ratio
                        // for computing the power this UID used.
                        if (u.mCpuClusterSpeed == null) {
                            u.mCpuClusterSpeed = new LongSamplingCounter[clusterSpeeds.length][];
                        final int numClusters = mPowerProfile.getNumCpuClusters();
                        if (u.mCpuClusterSpeed == null || u.mCpuClusterSpeed.length !=
                                numClusters) {
                            u.mCpuClusterSpeed = new LongSamplingCounter[numClusters][];
                        }

                        for (int cluster = 0; cluster < clusterSpeeds.length; cluster++) {
                            if (u.mCpuClusterSpeed[cluster] == null) {
                            final int speedsInCluster = mPowerProfile.getNumSpeedStepsInCpuCluster(
                                    cluster);
                            if (u.mCpuClusterSpeed[cluster] == null || speedsInCluster !=
                                    u.mCpuClusterSpeed[cluster].length) {
                                u.mCpuClusterSpeed[cluster] =
                                        new LongSamplingCounter[clusterSpeeds[cluster].length];
                                        new LongSamplingCounter[speedsInCluster];
                            }

                            final LongSamplingCounter[] cpuSpeeds = u.mCpuClusterSpeed[cluster];