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

This commit is contained in:
Hani Kazmi
2022-08-17 07:52:18 +00:00
committed by Android (Google) Code Review

View File

@@ -131,6 +131,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.app.HeavyWeightSwitcherActivity; import com.android.internal.app.HeavyWeightSwitcherActivity;
import com.android.internal.app.IVoiceInteractor; import com.android.internal.app.IVoiceInteractor;
import com.android.internal.protolog.common.ProtoLog; import com.android.internal.protolog.common.ProtoLog;
import com.android.internal.util.FrameworkStatsLog;
import com.android.server.am.PendingIntentRecord; import com.android.server.am.PendingIntentRecord;
import com.android.server.pm.InstantAppResolver; import com.android.server.pm.InstantAppResolver;
import com.android.server.power.ShutdownCheckPoints; 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; return START_SUCCESS;
} }