From e9a5ed804e0dd36ea231cd9c94af28f478cd8d73 Mon Sep 17 00:00:00 2001 From: Louis Chang Date: Tue, 27 Oct 2020 12:15:21 +0800 Subject: [PATCH] Use op package name as the calling package while start activities Apps with system_uid are allowed to run on other system core processes. With f9e5c9f, the component was unable to start activities since the calling package and the calling uid weren't the same app. Bug: 169859652 Test: start activity on phone process from a shared system uid package Change-Id: Ida27c7518fb81cb5a1ac654e86fb1918f962ebf8 --- core/java/android/app/Activity.java | 2 +- core/java/android/app/ActivityManager.java | 4 ++-- core/java/android/app/ContextImpl.java | 2 +- core/java/android/app/Instrumentation.java | 20 +++++++++---------- .../server/policy/PhoneWindowManager.java | 4 ++-- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 8c0b4387c27fe..6b3b0fcd742de 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -5818,7 +5818,7 @@ public class Activity extends ContextThemeWrapper intent.migrateExtraStreamToClipData(this); intent.prepareToLeaveProcess(this); result = ActivityTaskManager.getService() - .startActivity(mMainThread.getApplicationThread(), getBasePackageName(), + .startActivity(mMainThread.getApplicationThread(), getOpPackageName(), getAttributionTag(), intent, intent.resolveTypeIfNeeded(getContentResolver()), mToken, mEmbeddedID, requestCode, ActivityManager.START_FLAG_ONLY_IF_NEEDED, null, options); diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index 250f2f0b2dc98..4e156c7e99129 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -1931,7 +1931,7 @@ public class ActivityManager { ArrayList tasks = new ArrayList(); List appTasks; try { - appTasks = getTaskService().getAppTasks(mContext.getPackageName()); + appTasks = getTaskService().getAppTasks(mContext.getOpPackageName()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -2466,7 +2466,7 @@ public class ActivityManager { try { ActivityThread thread = ActivityThread.currentActivityThread(); IApplicationThread appThread = thread.getApplicationThread(); - String packageName = mContext.getPackageName(); + String packageName = mContext.getOpPackageName(); getTaskService().moveTaskToFront(appThread, packageName, taskId, flags, options); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java index e94fd452b7f82..d251c25c7296d 100644 --- a/core/java/android/app/ContextImpl.java +++ b/core/java/android/app/ContextImpl.java @@ -1039,7 +1039,7 @@ class ContextImpl extends Context { public void startActivityAsUser(Intent intent, Bundle options, UserHandle user) { try { ActivityTaskManager.getService().startActivityAsUser( - mMainThread.getApplicationThread(), getBasePackageName(), getAttributionTag(), + mMainThread.getApplicationThread(), getOpPackageName(), getAttributionTag(), intent, intent.resolveTypeIfNeeded(getContentResolver()), null, null, 0, Intent.FLAG_ACTIVITY_NEW_TASK, null, options, user.getIdentifier()); diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java index f2a9daafb4cef..74493e4b45251 100644 --- a/core/java/android/app/Instrumentation.java +++ b/core/java/android/app/Instrumentation.java @@ -1725,7 +1725,7 @@ public class Instrumentation { intent.migrateExtraStreamToClipData(who); intent.prepareToLeaveProcess(who); int result = ActivityTaskManager.getService().startActivity(whoThread, - who.getBasePackageName(), who.getAttributionTag(), intent, + who.getOpPackageName(), who.getAttributionTag(), intent, intent.resolveTypeIfNeeded(who.getContentResolver()), token, target != null ? target.mEmbeddedID : null, requestCode, 0, null, options); checkStartActivityResult(result, intent); @@ -1797,7 +1797,7 @@ public class Instrumentation { resolvedTypes[i] = intents[i].resolveTypeIfNeeded(who.getContentResolver()); } int result = ActivityTaskManager.getService().startActivities(whoThread, - who.getBasePackageName(), who.getAttributionTag(), intents, resolvedTypes, + who.getOpPackageName(), who.getAttributionTag(), intents, resolvedTypes, token, options, userId); checkStartActivityResult(result, intents[0]); return result; @@ -1864,7 +1864,7 @@ public class Instrumentation { intent.migrateExtraStreamToClipData(who); intent.prepareToLeaveProcess(who); int result = ActivityTaskManager.getService().startActivity(whoThread, - who.getBasePackageName(), who.getAttributionTag(), intent, + who.getOpPackageName(), who.getAttributionTag(), intent, intent.resolveTypeIfNeeded(who.getContentResolver()), token, target, requestCode, 0, null, options); checkStartActivityResult(result, intent); @@ -1931,7 +1931,7 @@ public class Instrumentation { intent.migrateExtraStreamToClipData(who); intent.prepareToLeaveProcess(who); int result = ActivityTaskManager.getService().startActivityAsUser(whoThread, - who.getBasePackageName(), who.getAttributionTag(), intent, + who.getOpPackageName(), who.getAttributionTag(), intent, intent.resolveTypeIfNeeded(who.getContentResolver()), token, resultWho, requestCode, 0, null, options, user.getIdentifier()); checkStartActivityResult(result, intent); @@ -1977,11 +1977,11 @@ public class Instrumentation { intent.migrateExtraStreamToClipData(who); intent.prepareToLeaveProcess(who); int result = ActivityTaskManager.getService() - .startActivityAsCaller(whoThread, who.getBasePackageName(), intent, - intent.resolveTypeIfNeeded(who.getContentResolver()), - token, target != null ? target.mEmbeddedID : null, - requestCode, 0, null, options, permissionToken, - ignoreTargetSecurity, userId); + .startActivityAsCaller(whoThread, who.getOpPackageName(), intent, + intent.resolveTypeIfNeeded(who.getContentResolver()), + token, target != null ? target.mEmbeddedID : null, + requestCode, 0, null, options, permissionToken, + ignoreTargetSecurity, userId); checkStartActivityResult(result, intent); } catch (RemoteException e) { throw new RuntimeException("Failure from system", e); @@ -2023,7 +2023,7 @@ public class Instrumentation { try { intent.migrateExtraStreamToClipData(who); intent.prepareToLeaveProcess(who); - int result = appTask.startActivity(whoThread.asBinder(), who.getBasePackageName(), + int result = appTask.startActivity(whoThread.asBinder(), who.getOpPackageName(), who.getAttributionTag(), intent, intent.resolveTypeIfNeeded(who.getContentResolver()), options); checkStartActivityResult(result, intent); diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 0983e10d2965f..6d73a6238d756 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -5208,7 +5208,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { final Intent dock = createHomeDockIntent(); if (dock != null) { int result = ActivityTaskManager.getService() - .startActivityAsUser(null, mContext.getBasePackageName(), + .startActivityAsUser(null, mContext.getOpPackageName(), mContext.getAttributionTag(), dock, dock.resolveTypeIfNeeded(mContext.getContentResolver()), null, null, 0, @@ -5220,7 +5220,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } int result = ActivityTaskManager.getService() - .startActivityAsUser(null, mContext.getBasePackageName(), + .startActivityAsUser(null, mContext.getOpPackageName(), mContext.getAttributionTag(), mHomeIntent, mHomeIntent.resolveTypeIfNeeded(mContext.getContentResolver()), null, null, 0,