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

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

Change-Id: Ifbf8ba01f30add58a2505e1998dcbfe58550f8db
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Hani Kazmi
2022-08-17 08:19:57 +00:00
committed by Automerger Merge Worker

View File

@@ -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;
}