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

Commit 7655195d authored by Hani Kazmi's avatar Hani Kazmi Committed by Automerger Merge Worker
Browse files

Merge "Add logging for activity starts to be blocked as part of...

Merge "Add logging for activity starts to be blocked as part of go/activity-security" into tm-qpr-dev am: 6f8ed225

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19532978



Change-Id: Ifbf8ba01f30add58a2505e1998dcbfe58550f8db
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents eb55c4e5 6f8ed225
Loading
Loading
Loading
Loading
+44 −0
Original line number Diff line number Diff line
@@ -131,6 +131,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.app.HeavyWeightSwitcherActivity;
import com.android.internal.app.IVoiceInteractor;
import com.android.internal.protolog.common.ProtoLog;
import com.android.internal.util.FrameworkStatsLog;
import com.android.server.am.PendingIntentRecord;
import com.android.server.pm.InstantAppResolver;
import com.android.server.power.ShutdownCheckPoints;
@@ -2100,6 +2101,49 @@ class ActivityStarter {
            }
        }

        // Log activity starts which violate one of the following rules of the
        // activity security model (ASM):
        // 1. Only the top activity on a task can start activities on that task
        // 2. Only the top activity on the top task can create new (top) tasks
        // We don't currently block, but these checks may later become blocks
        // TODO(b/236234252): Shift to BackgroundActivityStartController once
        // class is ready
        if (mSourceRecord != null) {
            int callerUid = mSourceRecord.getUid();
            ActivityRecord targetTopActivity =
                    targetTask != null ? targetTask.getTopNonFinishingActivity() : null;
            boolean passesAsmChecks = newTask
                    ? mService.mVisibleActivityProcessTracker.hasResumedActivity(callerUid)
                    : targetTopActivity != null && targetTopActivity.getUid() == callerUid;

            if (!passesAsmChecks) {
                Slog.i(TAG, "Launching r: " + r
                        + " from background: " + mSourceRecord
                        + ". New task: " + newTask);
                boolean newOrEmptyTask = newTask || (targetTopActivity == null);
                FrameworkStatsLog.write(FrameworkStatsLog.ACTIVITY_ACTION_BLOCKED,
                        /* caller_uid */
                        callerUid,
                        /* caller_activity_class_name */
                        mSourceRecord.info.name,
                        /* target_task_top_activity_uid */
                        newOrEmptyTask ? -1 : targetTopActivity.getUid(),
                        /* target_task_top_activity_class_name */
                        newOrEmptyTask ? null : targetTopActivity.info.name,
                        /* target_task_is_different */
                        newTask || !mSourceRecord.getTask().equals(targetTask),
                        /* target_activity_uid */
                        r.getUid(),
                        /* target_activity_class_name */
                        r.info.name,
                        /* target_intent_action */
                        r.intent.getAction(),
                        /* target_intent_flags */
                        r.intent.getFlags()
                );
            }
        }

        return START_SUCCESS;
    }