diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityStarter.java | 33 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityTaskSupervisor.java | 4 |
2 files changed, 25 insertions, 12 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index d187d2321e21..3c650e32beb9 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -2032,6 +2032,13 @@ class ActivityStarter { } // ASM rules have failed. Log why + return logAsmFailureAndCheckFeatureEnabled(r, newTask, targetTask, shouldBlockActivityStart, + taskToFront); + } + + private boolean logAsmFailureAndCheckFeatureEnabled(ActivityRecord r, boolean newTask, + Task targetTask, boolean shouldBlockActivityStart, boolean taskToFront) { + // ASM rules have failed. Log why ActivityRecord targetTopActivity = targetTask == null ? null : targetTask.getActivity(ar -> !ar.finishing && !ar.isAlwaysOnTop()); @@ -2041,6 +2048,13 @@ class ActivityStarter { ? FrameworkStatsLog.ACTIVITY_ACTION_BLOCKED__ACTION__ACTIVITY_START_SAME_TASK : FrameworkStatsLog.ACTIVITY_ACTION_BLOCKED__ACTION__ACTIVITY_START_DIFFERENT_TASK); + boolean blockActivityStartAndFeatureEnabled = ActivitySecurityModelFeatureFlags + .shouldRestrictActivitySwitch(mCallingUid) + && shouldBlockActivityStart; + + String asmDebugInfo = getDebugInfoForActivitySecurity("Launch", r, targetTask, + targetTopActivity, blockActivityStartAndFeatureEnabled, /*taskToFront*/taskToFront); + FrameworkStatsLog.write(FrameworkStatsLog.ACTIVITY_ACTION_BLOCKED, /* caller_uid */ mSourceRecord != null ? mSourceRecord.getUid() : mCallingUid, @@ -2069,24 +2083,21 @@ class ActivityStarter { targetTask != null && mSourceRecord != null && !targetTask.equals(mSourceRecord.getTask()) && targetTask.isVisible(), /* bal_code */ - mBalCode + mBalCode, + /* task_stack */ + asmDebugInfo ); - boolean blockActivityStartAndFeatureEnabled = ActivitySecurityModelFeatureFlags - .shouldRestrictActivitySwitch(mCallingUid) - && shouldBlockActivityStart; - String launchedFromPackageName = r.launchedFromPackage; if (ActivitySecurityModelFeatureFlags.shouldShowToast(mCallingUid)) { String toastText = ActivitySecurityModelFeatureFlags.DOC_LINK + (blockActivityStartAndFeatureEnabled ? " blocked " : " would block ") + getApplicationLabel(mService.mContext.getPackageManager(), - launchedFromPackageName); + launchedFromPackageName); UiThread.getHandler().post(() -> Toast.makeText(mService.mContext, toastText, Toast.LENGTH_LONG).show()); - logDebugInfoForActivitySecurity("Launch", r, targetTask, targetTopActivity, - blockActivityStartAndFeatureEnabled, /* taskToFront */ taskToFront); + Slog.i(TAG, asmDebugInfo); } if (blockActivityStartAndFeatureEnabled) { @@ -2104,7 +2115,7 @@ class ActivityStarter { } /** Only called when an activity launch may be blocked, which should happen very rarely */ - private void logDebugInfoForActivitySecurity(String action, ActivityRecord r, Task targetTask, + private String getDebugInfoForActivitySecurity(String action, ActivityRecord r, Task targetTask, ActivityRecord targetTopActivity, boolean blockActivityStartAndFeatureEnabled, boolean taskToFront) { final String prefix = "[ASM] "; @@ -2165,7 +2176,7 @@ class ActivityStarter { joiner.add(prefix + "BalCode: " + balCodeToString(mBalCode)); joiner.add(prefix + "------ Activity Security " + action + " Debug Logging End ------"); - Slog.i(TAG, joiner.toString()); + return joiner.toString(); } /** @@ -2339,7 +2350,7 @@ class ActivityStarter { + ActivitySecurityModelFeatureFlags.DOC_LINK, Toast.LENGTH_LONG).show()); - logDebugInfoForActivitySecurity("Clear Top", mStartActivity, targetTask, targetTaskTop, + getDebugInfoForActivitySecurity("Clear Top", mStartActivity, targetTask, targetTaskTop, shouldBlockActivityStart, /* taskToFront */ true); } } diff --git a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java index 5553600b403f..cc130c407690 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +++ b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java @@ -1752,7 +1752,9 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { /* multi_window */ false, /* bal_code */ - -1 + -1, + /* task_stack */ + null ); boolean restrictActivitySwitch = ActivitySecurityModelFeatureFlags |