summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/ActivityStarter.java33
-rw-r--r--services/core/java/com/android/server/wm/ActivityTaskSupervisor.java4
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