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

Commit 7367ed84 authored by Michal Karpinski's avatar Michal Karpinski
Browse files

Whitelisting remote bugreport finished broadcast

Allowing remote bugreport broadcast to be delivered even if
DISALLOW_DEBUGGING_FEATURES user restriction is enforced.

Bug: 26814173
Change-Id: I2f574de261398adbd71d5f75b3c237c92aeb076c
parent 910a367c
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -499,6 +499,9 @@ public final class ActivityManagerService extends ActivityManagerNative
    private static final int PERSISTENT_MASK =
            ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PERSISTENT;
    // Intent sent when remote bugreport collection has been completed
    private static final String INTENT_REMOTE_BUGREPORT_FINISHED =
            "android.intent.action.REMOTE_BUGREPORT_FINISHED";
    // Delay to disable app launch boost
    static final int APP_BOOST_MESSAGE_DELAY = 3000;
@@ -16797,10 +16800,12 @@ public final class ActivityManagerService extends ActivityManagerNative
            HashSet<ComponentName> singleUserReceivers = null;
            boolean scannedFirstReceivers = false;
            for (int user : users) {
                // Skip users that have Shell restrictions
                // Skip users that have Shell restrictions, with exception of always permitted
                // Shell broadcasts
                if (callingUid == Process.SHELL_UID
                        && mUserController.hasUserRestriction(
                        UserManager.DISALLOW_DEBUGGING_FEATURES, user)) {
                                UserManager.DISALLOW_DEBUGGING_FEATURES, user)
                        && !isPermittedShellBroadcast(intent)) {
                    continue;
                }
                List<ResolveInfo> newReceivers = AppGlobals.getPackageManager()
@@ -16867,6 +16872,11 @@ public final class ActivityManagerService extends ActivityManagerNative
        return receivers;
    }
    private boolean isPermittedShellBroadcast(Intent intent) {
        // remote bugreport should always be allowed to be taken
        return INTENT_REMOTE_BUGREPORT_FINISHED.equals(intent.getAction());
    }
    final int broadcastIntentLocked(ProcessRecord callerApp,
            String callerPackage, Intent intent, String resolvedType,
            IIntentReceiver resultTo, int resultCode, String resultData,