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

Commit 090c462b authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

Don't let callers OOM the system process.

Constrain our default history size to 180 days; if we end up needing
more, we'll dynamically grow the history object.

Test: manual
Bug: 70916680
Change-Id: Id885f9800ad8f45fb0c1a89dab5a4b10ffd9e2f2
parent b133cbfd
Loading
Loading
Loading
Loading
+7 −2
Original line number Original line Diff line number Diff line
@@ -16,9 +16,9 @@


package com.android.server.net;
package com.android.server.net;


import static android.net.NetworkStats.IFACE_ALL;
import static android.net.NetworkStats.DEFAULT_NETWORK_NO;
import static android.net.NetworkStats.DEFAULT_NETWORK_NO;
import static android.net.NetworkStats.DEFAULT_NETWORK_YES;
import static android.net.NetworkStats.DEFAULT_NETWORK_YES;
import static android.net.NetworkStats.IFACE_ALL;
import static android.net.NetworkStats.METERED_NO;
import static android.net.NetworkStats.METERED_NO;
import static android.net.NetworkStats.METERED_YES;
import static android.net.NetworkStats.METERED_YES;
import static android.net.NetworkStats.ROAMING_NO;
import static android.net.NetworkStats.ROAMING_NO;
@@ -42,9 +42,11 @@ import android.service.NetworkStatsCollectionKeyProto;
import android.service.NetworkStatsCollectionProto;
import android.service.NetworkStatsCollectionProto;
import android.service.NetworkStatsCollectionStatsProto;
import android.service.NetworkStatsCollectionStatsProto;
import android.telephony.SubscriptionPlan;
import android.telephony.SubscriptionPlan;
import android.text.format.DateUtils;
import android.util.ArrayMap;
import android.util.ArrayMap;
import android.util.AtomicFile;
import android.util.AtomicFile;
import android.util.IntArray;
import android.util.IntArray;
import android.util.MathUtils;
import android.util.Pair;
import android.util.Pair;
import android.util.Slog;
import android.util.Slog;
import android.util.proto.ProtoOutputStream;
import android.util.proto.ProtoOutputStream;
@@ -245,7 +247,10 @@ public class NetworkStatsCollection implements FileRotator.Reader {
                    + " is forbidden for caller " + callerUid);
                    + " is forbidden for caller " + callerUid);
        }
        }


        final int bucketEstimate = (int) ((end - start) / mBucketDuration);
        // 180 days of history should be enough for anyone; if we end up needing
        // more, we'll dynamically grow the history object.
        final int bucketEstimate = (int) MathUtils.constrain(((end - start) / mBucketDuration), 0,
                (180 * DateUtils.DAY_IN_MILLIS) / mBucketDuration);
        final NetworkStatsHistory combined = new NetworkStatsHistory(
        final NetworkStatsHistory combined = new NetworkStatsHistory(
                mBucketDuration, bucketEstimate, fields);
                mBucketDuration, bucketEstimate, fields);