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

Commit 5cbcb52b authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

Rate-limit how often we collect wtf() logs.

We've seen that aggressive Log.wtf() calls can DoS the system
process, since we fork and collect recent logcat output for each
call.  After this CL, we rate-limit to only perform this heavy
lifting 5 times during any given 10 second window of time.

We still log the wtf() message to the binary event log.

Bug: 28117774, 28052546, 27994717, 27381069
Change-Id: Ic91b23fe7ee26818083a8d40fd4850fcb9d93643
parent ed2edc7a
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -13164,6 +13164,9 @@ public final class ActivityManagerService extends ActivityManagerNative
        }
    }
    private volatile long mWtfClusterStart;
    private volatile int mWtfClusterCount;
    /**
     * Write a description of an error (crash, WTF, ANR) to the drop box.
     * @param eventType to include in the drop box tag ("crash", "wtf", etc.)
@@ -13190,6 +13193,16 @@ public final class ActivityManagerService extends ActivityManagerNative
        // Exit early if the dropbox isn't configured to accept this report type.
        if (dbox == null || !dbox.isTagEnabled(dropboxTag)) return;
        // Rate-limit how often we're willing to do the heavy lifting below to
        // collect and record logs; currently 5 logs per 10 second period.
        final long now = SystemClock.elapsedRealtime();
        if (now - mWtfClusterStart > 10 * DateUtils.SECOND_IN_MILLIS) {
            mWtfClusterStart = now;
            mWtfClusterCount = 1;
        } else {
            if (mWtfClusterCount++ >= 5) return;
        }
        final StringBuilder sb = new StringBuilder(1024);
        appendDropBoxProcessHeaders(process, processName, sb);
        if (process != null) {