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

Commit bb228f68 authored by Achim Thesmann's avatar Achim Thesmann Committed by Android (Google) Code Review
Browse files

Merge "Write more detailed logs" into main

parents 90ad0dcf 8877fcb3
Loading
Loading
Loading
Loading
+54 −14
Original line number Diff line number Diff line
@@ -219,6 +219,7 @@ public class BackgroundActivityStartController {
        private final WindowProcessController mCallerApp;
        private final WindowProcessController mRealCallerApp;
        private final boolean mIsCallForResult;
        private final ActivityOptions mCheckedOptions;

        private BalState(int callingUid, int callingPid, final String callingPackage,
                 int realCallingUid, int realCallingPid,
@@ -239,6 +240,7 @@ public class BackgroundActivityStartController {
            mIntent = intent;
            mRealCallingPackage = mService.getPackageNameIfUnique(realCallingUid, realCallingPid);
            mIsCallForResult = resultRecord != null;
            mCheckedOptions = checkedOptions;
            if (balRequireOptInByPendingIntentCreator() // auto-opt in introduced with this feature
                    && (originatingPendingIntent == null // not a PendingIntent
                    || mIsCallForResult) // sent for result
@@ -561,7 +563,7 @@ public class BackgroundActivityStartController {
            if (mService.hasActiveVisibleWindow(realCallingSdkSandboxUidToAppUid)) {
                BalVerdict balVerdict = new BalVerdict(BAL_ALLOW_SDK_SANDBOX, /*background*/ false,
                        "uid in SDK sandbox has visible (non-toast) window");
                return statsLog(balVerdict, state);
                return allowBasedOnRealCaller(state, balVerdict, balVerdict);
            }
        }

@@ -573,7 +575,7 @@ public class BackgroundActivityStartController {
                    Slog.d(TAG, "Background activity start allowed. "
                            + state.dump(resultForCaller, resultForCaller));
                }
                return statsLog(resultForCaller, state);
                return allowBasedOnCaller(state, resultForCaller, resultForCaller);
            }
            return abortLaunch(state, resultForCaller, resultForCaller);
        }
@@ -602,7 +604,7 @@ public class BackgroundActivityStartController {
                Slog.d(TAG, "Activity start explicitly allowed by caller. "
                        + state.dump(resultForCaller, resultForRealCaller));
            }
            return statsLog(resultForCaller, state);
            return allowBasedOnCaller(state, resultForCaller, resultForRealCaller);
        }
        if (resultForRealCaller.allows()
                && checkedOptions.getPendingIntentBackgroundActivityStartMode()
@@ -611,7 +613,7 @@ public class BackgroundActivityStartController {
                Slog.d(TAG, "Activity start explicitly allowed by real caller. "
                        + state.dump(resultForCaller, resultForRealCaller));
            }
            return statsLog(resultForRealCaller, state);
            return allowBasedOnRealCaller(state, resultForCaller, resultForRealCaller);
        }
        // Handle PendingIntent cases with default behavior next
        boolean callerCanAllow = resultForCaller.allows()
@@ -629,7 +631,7 @@ public class BackgroundActivityStartController {
                            + state.dump(resultForCaller, resultForRealCaller));
                }
                // return the realCaller result for backwards compatibility
                return statsLog(resultForRealCaller, state);
                return allowBasedOnRealCaller(state, resultForCaller, resultForRealCaller);
            }
            if (state.mBalAllowedByPiCreator.allowsBackgroundActivityStarts()) {
                Slog.wtf(TAG,
@@ -639,7 +641,7 @@ public class BackgroundActivityStartController {
                                + state.dump(resultForCaller, resultForRealCaller));
                showBalRiskToast();
                // return the realCaller result for backwards compatibility
                return statsLog(resultForRealCaller, state);
                return allowBasedOnRealCaller(state, resultForCaller, resultForRealCaller);
            }
            Slog.wtf(TAG,
                    "Without Android 15 BAL hardening this activity start would be allowed"
@@ -655,7 +657,7 @@ public class BackgroundActivityStartController {
                    Slog.d(TAG, "Activity start allowed by caller. "
                            + state.dump(resultForCaller, resultForRealCaller));
                }
                return statsLog(resultForCaller, state);
                return allowBasedOnCaller(state, resultForCaller, resultForRealCaller);
            }
            if (state.mBalAllowedByPiCreator.allowsBackgroundActivityStarts()) {
                Slog.wtf(TAG,
@@ -664,7 +666,7 @@ public class BackgroundActivityStartController {
                                + " (missing opt in by PI creator)! "
                                + state.dump(resultForCaller, resultForRealCaller));
                showBalRiskToast();
                return statsLog(resultForCaller, state);
                return allowBasedOnCaller(state, resultForCaller, resultForRealCaller);
            }
            Slog.wtf(TAG,
                    "Without Android 15 BAL hardening this activity start would be allowed"
@@ -681,7 +683,7 @@ public class BackgroundActivityStartController {
                                + " (missing opt in by PI sender)! "
                                + state.dump(resultForCaller, resultForRealCaller));
                showBalRiskToast();
                return statsLog(resultForRealCaller, state);
                return allowBasedOnRealCaller(state, resultForCaller, resultForRealCaller);
            }
            Slog.wtf(TAG, "Without Android 14 BAL hardening this activity start would be allowed"
                    + " (missing opt in by PI sender)! "
@@ -692,12 +694,30 @@ public class BackgroundActivityStartController {
        return abortLaunch(state, resultForCaller, resultForRealCaller);
    }

    private BalVerdict allowBasedOnCaller(BalState state, BalVerdict resultForCaller,
            BalVerdict resultForRealCaller) {
        if (DEBUG_ACTIVITY_STARTS) {
            Slog.d(TAG, "Background activity launch allowed based on caller. "
                    + state.dump(resultForCaller, resultForRealCaller));
        }
        return statsLog(resultForCaller, resultForCaller, resultForRealCaller, state);
    }

    private BalVerdict allowBasedOnRealCaller(BalState state, BalVerdict resultForCaller,
            BalVerdict resultForRealCaller) {
        if (DEBUG_ACTIVITY_STARTS) {
            Slog.d(TAG, "Background activity launch allowed based on real caller. "
                    + state.dump(resultForCaller, resultForRealCaller));
        }
        return statsLog(resultForRealCaller, resultForCaller, resultForRealCaller, state);
    }

    private BalVerdict abortLaunch(BalState state, BalVerdict resultForCaller,
            BalVerdict resultForRealCaller) {
        Slog.w(TAG, "Background activity launch blocked! "
                + state.dump(resultForCaller, resultForRealCaller));
        showBalBlockedToast();
        return statsLog(BalVerdict.BLOCK, state);
        return statsLog(BalVerdict.BLOCK, resultForCaller, resultForRealCaller, state);
    }

    /**
@@ -1444,7 +1464,8 @@ public class BackgroundActivityStartController {
                /* defaultValue= */ true);
    }

    private BalVerdict statsLog(BalVerdict finalVerdict, BalState state) {
    private BalVerdict statsLog(BalVerdict finalVerdict,
            BalVerdict callerVerdict, BalVerdict realCallerVerdict, BalState state) {
        if (finalVerdict.blocks() && mService.isActivityStartsLoggingEnabled()) {
            // log aborted activity start to TRON
            mSupervisor
@@ -1475,7 +1496,16 @@ public class BackgroundActivityStartController {
                    activityName,
                    BAL_ALLOW_PENDING_INTENT,
                    callingUid,
                    realCallingUid);
                    realCallingUid,
                    callerVerdict.getRawCode(),
                    state.mBalAllowedByPiCreator.allowsBackgroundActivityStarts(),
                    state.mCheckedOptions.getPendingIntentCreatorBackgroundActivityStartMode()
                            != ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED,
                    realCallerVerdict.getRawCode(),
                    state.mBalAllowedByPiSender.allowsBackgroundActivityStarts(),
                    state.mCheckedOptions.getPendingIntentBackgroundActivityStartMode()
                            != ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED
            );
        }
        if (code == BAL_ALLOW_PERMISSION || code == BAL_ALLOW_FOREGROUND
                || code == BAL_ALLOW_SAW_PERMISSION) {
@@ -1484,7 +1514,17 @@ public class BackgroundActivityStartController {
                    /*activityName*/ "",
                    code,
                    callingUid,
                    realCallingUid);
                    realCallingUid,
                    callerVerdict.getRawCode(),
                    state.mBalAllowedByPiCreator.allowsBackgroundActivityStarts(),
                    state.mCheckedOptions.getPendingIntentCreatorBackgroundActivityStartMode()
                            != ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED,
                    realCallerVerdict.getRawCode(),
                    state.mBalAllowedByPiSender.allowsBackgroundActivityStarts(),
                    state.mCheckedOptions.getPendingIntentBackgroundActivityStartMode()
                            != ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED
            );

        }
        return finalVerdict;
    }
+16 −2
Original line number Diff line number Diff line
@@ -926,7 +926,14 @@ public class ActivityStarterTests extends WindowTestsBase {
                "",  // activity name
                BackgroundActivityStartController.BAL_ALLOW_PERMISSION,
                UNIMPORTANT_UID,
                UNIMPORTANT_UID2));
                UNIMPORTANT_UID2,
                BackgroundActivityStartController.BAL_ALLOW_PERMISSION,
                true, // opt in
                false, // but no explicit opt in
                BackgroundActivityStartController.BAL_BLOCK,
                true, // opt in
                false // but no explicit opt in
            ));
        mockingSession.finishMocking();
    }

@@ -957,7 +964,14 @@ public class ActivityStarterTests extends WindowTestsBase {
                DEFAULT_COMPONENT_PACKAGE_NAME + "/" + DEFAULT_COMPONENT_PACKAGE_NAME,
                BackgroundActivityStartController.BAL_ALLOW_PENDING_INTENT,
                UNIMPORTANT_UID,
                Process.SYSTEM_UID));
                Process.SYSTEM_UID,
                BackgroundActivityStartController.BAL_ALLOW_PERMISSION,
                true, // opt in
                false, // but no explicit opt in
                BackgroundActivityStartController.BAL_ALLOW_VISIBLE_WINDOW,
                true, // opt in
                false // but no explicit opt in
            ));
        mockingSession.finishMocking();
    }