From adc7c25ebb4404070325b1a443d200fd6517e82a Mon Sep 17 00:00:00 2001 From: Daniel Norman Date: Wed, 26 Apr 2023 16:34:19 +0000 Subject: [PATCH] Revert "Use PM#isSameApp instead of getPackageUidAsUser." This reverts commit 9a96e9ec44d2bd3ff2448ab92c79dde81ca4ab63. Reason for revert: Possibly caused b/279686368 Change-Id: I5a5d227eb3327bdd5aa7c903b2aa95c8c7290038 --- .../AccessibilityManagerService.java | 2 +- .../AccessibilitySecurityPolicy.java | 13 +++++----- .../AccessibilitySecurityPolicyTest.java | 25 +++++++++---------- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index a510d1663298a..a3b4a0f51c755 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -490,7 +490,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub mMainHandler, context, new PolicyWarningUIController.NotificationController(context)); mSecurityPolicy = new AccessibilitySecurityPolicy(policyWarningUIController, mContext, - this, LocalServices.getService(PackageManagerInternal.class)); + this); mA11yWindowManager = new AccessibilityWindowManager(mLock, mMainHandler, mWindowManagerService, this, mSecurityPolicy, this, mTraceManager); mA11yDisplayListener = new AccessibilityDisplayListener(mContext, mMainHandler); diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilitySecurityPolicy.java b/services/accessibility/java/com/android/server/accessibility/AccessibilitySecurityPolicy.java index 65c1873498a15..88656239e59b8 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilitySecurityPolicy.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilitySecurityPolicy.java @@ -29,7 +29,6 @@ import android.appwidget.AppWidgetManagerInternal; import android.content.ComponentName; import android.content.Context; import android.content.pm.PackageManager; -import android.content.pm.PackageManagerInternal; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.content.pm.UserInfo; @@ -100,7 +99,6 @@ public class AccessibilitySecurityPolicy { private final Context mContext; private final PackageManager mPackageManager; - private final PackageManagerInternal mPackageManagerInternal; private final UserManager mUserManager; private final AppOpsManager mAppOpsManager; private final AccessibilityUserManager mAccessibilityUserManager; @@ -118,12 +116,10 @@ public class AccessibilitySecurityPolicy { */ public AccessibilitySecurityPolicy(PolicyWarningUIController policyWarningUIController, @NonNull Context context, - @NonNull AccessibilityUserManager a11yUserManager, - @NonNull PackageManagerInternal packageManagerInternal) { + @NonNull AccessibilityUserManager a11yUserManager) { mContext = context; mAccessibilityUserManager = a11yUserManager; mPackageManager = mContext.getPackageManager(); - mPackageManagerInternal = packageManagerInternal; mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE); mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE); mPolicyWarningUIController = policyWarningUIController; @@ -517,7 +513,12 @@ public class AccessibilitySecurityPolicy { private boolean isValidPackageForUid(String packageName, int uid) { final long token = Binder.clearCallingIdentity(); try { - return mPackageManagerInternal.isSameApp(packageName, uid, UserHandle.getUserId(uid)); + // Since we treat calls from a profile as if made by its parent, using + // MATCH_ANY_USER to query the uid of the given package name. + return uid == mPackageManager.getPackageUidAsUser( + packageName, PackageManager.MATCH_ANY_USER, UserHandle.getUserId(uid)); + } catch (PackageManager.NameNotFoundException e) { + return false; } finally { Binder.restoreCallingIdentity(token); } diff --git a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilitySecurityPolicyTest.java b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilitySecurityPolicyTest.java index 8f0d0144a40eb..eb6670ee964c7 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilitySecurityPolicyTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilitySecurityPolicyTest.java @@ -146,7 +146,7 @@ public class AccessibilitySecurityPolicyTest { @Mock private PolicyWarningUIController mPolicyWarningUIController; @Mock - private PackageManagerInternal mMockPackageManagerInternal; + private PackageManagerInternal mPackageManagerInternal; @Before public void setUp() { @@ -158,8 +158,7 @@ public class AccessibilitySecurityPolicyTest { R.dimen.accessibility_focus_highlight_stroke_width, 1); mA11ySecurityPolicy = new AccessibilitySecurityPolicy( - mPolicyWarningUIController, mContext, mMockA11yUserManager, - mMockPackageManagerInternal); + mPolicyWarningUIController, mContext, mMockA11yUserManager); mA11ySecurityPolicy.setSendingNonA11yToolNotificationLocked(true); mA11ySecurityPolicy.setAccessibilityWindowManager(mMockA11yWindowManager); mA11ySecurityPolicy.setAppWidgetManager(mMockAppWidgetManager); @@ -238,8 +237,8 @@ public class AccessibilitySecurityPolicyTest { @Test public void resolveValidReportedPackage_uidAndPkgNameMatched_returnPkgName() throws PackageManager.NameNotFoundException { - when(mMockPackageManagerInternal.isSameApp(PACKAGE_NAME, APP_UID, TEST_USER_ID)) - .thenReturn(true); + when(mMockPackageManager.getPackageUidAsUser(PACKAGE_NAME, + PackageManager.MATCH_ANY_USER, TEST_USER_ID)).thenReturn(APP_UID); assertEquals(mA11ySecurityPolicy.resolveValidReportedPackageLocked( PACKAGE_NAME, APP_UID, TEST_USER_ID, APP_PID), @@ -258,8 +257,8 @@ public class AccessibilitySecurityPolicyTest { when(mMockAppWidgetManager.getHostedWidgetPackages(widgetHostUid)) .thenReturn(widgetPackages); - when(mMockPackageManagerInternal.isSameApp(hostPackageName, widgetHostUid, TEST_USER_ID)) - .thenReturn(true); + when(mMockPackageManager.getPackageUidAsUser(hostPackageName, TEST_USER_ID)) + .thenReturn(widgetHostUid); assertEquals(mA11ySecurityPolicy.resolveValidReportedPackageLocked( widgetPackageName, widgetHostUid, TEST_USER_ID, widgetHostPid), @@ -273,8 +272,8 @@ public class AccessibilitySecurityPolicyTest { final String[] uidPackages = {PACKAGE_NAME, PACKAGE_NAME2}; when(mMockPackageManager.getPackagesForUid(APP_UID)) .thenReturn(uidPackages); - when(mMockPackageManagerInternal.isSameApp(invalidPackageName, APP_UID, TEST_USER_ID)) - .thenReturn(false); + when(mMockPackageManager.getPackageUidAsUser(invalidPackageName, TEST_USER_ID)) + .thenThrow(PackageManager.NameNotFoundException.class); when(mMockAppWidgetManager.getHostedWidgetPackages(APP_UID)) .thenReturn(new ArraySet<>()); mContext.getTestablePermissions().setPermission( @@ -293,8 +292,8 @@ public class AccessibilitySecurityPolicyTest { final String[] uidPackages = {PACKAGE_NAME}; when(mMockPackageManager.getPackagesForUid(APP_UID)) .thenReturn(uidPackages); - when(mMockPackageManagerInternal.isSameApp(wantedPackageName, wantedUid, TEST_USER_ID)) - .thenReturn(true); + when(mMockPackageManager.getPackageUidAsUser(wantedPackageName, TEST_USER_ID)) + .thenReturn(wantedUid); when(mMockAppWidgetManager.getHostedWidgetPackages(APP_UID)) .thenReturn(new ArraySet<>()); mContext.getTestablePermissions().setPermission( @@ -313,8 +312,8 @@ public class AccessibilitySecurityPolicyTest { final String[] uidPackages = {PACKAGE_NAME}; when(mMockPackageManager.getPackagesForUid(APP_UID)) .thenReturn(uidPackages); - when(mMockPackageManagerInternal.isSameApp(wantedPackageName, wantedUid, TEST_USER_ID)) - .thenReturn(true); + when(mMockPackageManager.getPackageUidAsUser(wantedPackageName, TEST_USER_ID)) + .thenReturn(wantedUid); when(mMockAppWidgetManager.getHostedWidgetPackages(APP_UID)) .thenReturn(new ArraySet<>()); mContext.getTestablePermissions().setPermission(