Merge "Add logging for activity starts to be blocked as part of go/activity-security" into tm-qpr-dev
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user