Loading core/java/android/app/ApplicationPackageManager.java +1 −1 Original line number Diff line number Diff line Loading @@ -1061,7 +1061,7 @@ public class ApplicationPackageManager extends PackageManager { throws NameNotFoundException { try { int uid = mPM.getUidForSharedUser(sharedUserName); if(uid != -1) { if (uid != Process.INVALID_UID) { return uid; } } catch (RemoteException e) { Loading services/core/java/com/android/server/pm/PackageManagerService.java +10 −8 Original line number Diff line number Diff line Loading @@ -10060,24 +10060,26 @@ public class PackageManagerService extends IPackageManager.Stub @Override public int getUidForSharedUser(String sharedUserName) { if (getInstantAppPackageName(Binder.getCallingUid()) != null) { return -1; } if (sharedUserName == null) { return -1; return Process.INVALID_UID; } final int callingUid = Binder.getCallingUid(); if (getInstantAppPackageName(callingUid) != null) { return Process.INVALID_UID; } // reader synchronized (mLock) { SharedUserSetting suid; try { suid = mSettings.getSharedUserLPw(sharedUserName, 0, 0, false); if (suid != null) { final SharedUserSetting suid = mSettings.getSharedUserLPw(sharedUserName, 0 /* pkgFlags */, 0 /* pkgPrivateFlags */, false /* create */); if (suid != null && !shouldFilterApplicationLocked(suid, callingUid, UserHandle.getUserId(callingUid))) { return suid.userId; } } catch (PackageManagerException ignore) { // can't happen, but, still need to catch it } return -1; return Process.INVALID_UID; } } services/tests/PackageManagerServiceTests/appenumeration/AndroidTest.xml +1 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.FilePusher"> <option name="push" value="AppEnumerationSyncProviderTestApp.apk->/data/local/tmp/appenumerationtests/AppEnumerationSyncProviderTestApp.apk" /> <option name="push" value="AppEnumerationHasAppOpPermissionTestApp.apk->/data/local/tmp/appenumerationtests/AppEnumerationHasAppOpPermissionTestApp.apk" /> <option name="push" value="AppEnumerationSharedUserTestApp.apk->/data/local/tmp/appenumerationtests/AppEnumerationSharedUserTestApp.apk" /> </target_preparer> <option name="test-tag" value="AppEnumerationInternalTest" /> Loading services/tests/PackageManagerServiceTests/appenumeration/src/com/android/server/pm/test/appenumeration/AppEnumerationInternalTests.java +22 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import static com.google.common.truth.Truth.assertThat; import android.app.AppGlobals; import android.content.pm.IPackageManager; import android.content.pm.ProviderInfo; import android.os.Process; import androidx.test.runner.AndroidJUnit4; Loading @@ -45,14 +46,18 @@ public class AppEnumerationInternalTests { TEST_DATA_PATH + "AppEnumerationSyncProviderTestApp.apk"; private static final String HAS_APPOP_PERMISSION_APK_PATH = TEST_DATA_PATH + "AppEnumerationHasAppOpPermissionTestApp.apk"; private static final String SHARED_USER_APK_PATH = TEST_DATA_PATH + "AppEnumerationSharedUserTestApp.apk"; private static final String TARGET_SYNC_PROVIDER = "com.android.appenumeration.syncprovider"; private static final String TARGET_HAS_APPOP_PERMISSION = "com.android.appenumeration.hasappoppermission"; private static final String TARGET_SHARED_USER = "com.android.appenumeration.shareduid"; private static final String SYNC_PROVIDER_AUTHORITY = TARGET_SYNC_PROVIDER; private static final String PERMISSION_REQUEST_INSTALL_PACKAGES = "android.permission.REQUEST_INSTALL_PACKAGES"; private static final String SHARED_USER_NAME = "com.android.appenumeration.shareduid"; private IPackageManager mIPackageManager; Loading @@ -65,6 +70,7 @@ public class AppEnumerationInternalTests { public void tearDown() throws Exception { uninstallPackage(TARGET_SYNC_PROVIDER); uninstallPackage(TARGET_HAS_APPOP_PERMISSION); uninstallPackage(TARGET_SHARED_USER); } @Test Loading Loading @@ -111,6 +117,22 @@ public class AppEnumerationInternalTests { assertThat(packageNames).asList().doesNotContain(TARGET_HAS_APPOP_PERMISSION); } @Test public void getUidForSharedUser_canSeeForceQueryable() throws Exception { installPackage(SHARED_USER_APK_PATH, true /* forceQueryable */); final int uid = mIPackageManager.getUidForSharedUser(SHARED_USER_NAME); assertThat(uid).isGreaterThan(Process.FIRST_APPLICATION_UID); } @Test public void getUidForSharedUser_cannotSeeSharedUser() throws Exception { installPackage(SHARED_USER_APK_PATH, false /* forceQueryable */); final int uid = mIPackageManager.getUidForSharedUser(SHARED_USER_NAME); assertThat(uid).isEqualTo(Process.INVALID_UID); } private static void installPackage(String apkPath, boolean forceQueryable) { final StringBuilder cmd = new StringBuilder("pm install "); if (forceQueryable) { Loading services/tests/PackageManagerServiceTests/appenumeration/test-apps/target/Android.bp +14 −0 Original line number Diff line number Diff line Loading @@ -48,3 +48,17 @@ android_test_helper_app { test_suites: ["device-tests"], platform_apis: true, } android_test_helper_app { name: "AppEnumerationSharedUserTestApp", srcs: ["src/**/*.java"], manifest: "AndroidManifest-sharedUser.xml", dex_preopt: { enabled: false, }, optimize: { enabled: false, }, test_suites: ["device-tests"], platform_apis: true, } Loading
core/java/android/app/ApplicationPackageManager.java +1 −1 Original line number Diff line number Diff line Loading @@ -1061,7 +1061,7 @@ public class ApplicationPackageManager extends PackageManager { throws NameNotFoundException { try { int uid = mPM.getUidForSharedUser(sharedUserName); if(uid != -1) { if (uid != Process.INVALID_UID) { return uid; } } catch (RemoteException e) { Loading
services/core/java/com/android/server/pm/PackageManagerService.java +10 −8 Original line number Diff line number Diff line Loading @@ -10060,24 +10060,26 @@ public class PackageManagerService extends IPackageManager.Stub @Override public int getUidForSharedUser(String sharedUserName) { if (getInstantAppPackageName(Binder.getCallingUid()) != null) { return -1; } if (sharedUserName == null) { return -1; return Process.INVALID_UID; } final int callingUid = Binder.getCallingUid(); if (getInstantAppPackageName(callingUid) != null) { return Process.INVALID_UID; } // reader synchronized (mLock) { SharedUserSetting suid; try { suid = mSettings.getSharedUserLPw(sharedUserName, 0, 0, false); if (suid != null) { final SharedUserSetting suid = mSettings.getSharedUserLPw(sharedUserName, 0 /* pkgFlags */, 0 /* pkgPrivateFlags */, false /* create */); if (suid != null && !shouldFilterApplicationLocked(suid, callingUid, UserHandle.getUserId(callingUid))) { return suid.userId; } } catch (PackageManagerException ignore) { // can't happen, but, still need to catch it } return -1; return Process.INVALID_UID; } }
services/tests/PackageManagerServiceTests/appenumeration/AndroidTest.xml +1 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.FilePusher"> <option name="push" value="AppEnumerationSyncProviderTestApp.apk->/data/local/tmp/appenumerationtests/AppEnumerationSyncProviderTestApp.apk" /> <option name="push" value="AppEnumerationHasAppOpPermissionTestApp.apk->/data/local/tmp/appenumerationtests/AppEnumerationHasAppOpPermissionTestApp.apk" /> <option name="push" value="AppEnumerationSharedUserTestApp.apk->/data/local/tmp/appenumerationtests/AppEnumerationSharedUserTestApp.apk" /> </target_preparer> <option name="test-tag" value="AppEnumerationInternalTest" /> Loading
services/tests/PackageManagerServiceTests/appenumeration/src/com/android/server/pm/test/appenumeration/AppEnumerationInternalTests.java +22 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import static com.google.common.truth.Truth.assertThat; import android.app.AppGlobals; import android.content.pm.IPackageManager; import android.content.pm.ProviderInfo; import android.os.Process; import androidx.test.runner.AndroidJUnit4; Loading @@ -45,14 +46,18 @@ public class AppEnumerationInternalTests { TEST_DATA_PATH + "AppEnumerationSyncProviderTestApp.apk"; private static final String HAS_APPOP_PERMISSION_APK_PATH = TEST_DATA_PATH + "AppEnumerationHasAppOpPermissionTestApp.apk"; private static final String SHARED_USER_APK_PATH = TEST_DATA_PATH + "AppEnumerationSharedUserTestApp.apk"; private static final String TARGET_SYNC_PROVIDER = "com.android.appenumeration.syncprovider"; private static final String TARGET_HAS_APPOP_PERMISSION = "com.android.appenumeration.hasappoppermission"; private static final String TARGET_SHARED_USER = "com.android.appenumeration.shareduid"; private static final String SYNC_PROVIDER_AUTHORITY = TARGET_SYNC_PROVIDER; private static final String PERMISSION_REQUEST_INSTALL_PACKAGES = "android.permission.REQUEST_INSTALL_PACKAGES"; private static final String SHARED_USER_NAME = "com.android.appenumeration.shareduid"; private IPackageManager mIPackageManager; Loading @@ -65,6 +70,7 @@ public class AppEnumerationInternalTests { public void tearDown() throws Exception { uninstallPackage(TARGET_SYNC_PROVIDER); uninstallPackage(TARGET_HAS_APPOP_PERMISSION); uninstallPackage(TARGET_SHARED_USER); } @Test Loading Loading @@ -111,6 +117,22 @@ public class AppEnumerationInternalTests { assertThat(packageNames).asList().doesNotContain(TARGET_HAS_APPOP_PERMISSION); } @Test public void getUidForSharedUser_canSeeForceQueryable() throws Exception { installPackage(SHARED_USER_APK_PATH, true /* forceQueryable */); final int uid = mIPackageManager.getUidForSharedUser(SHARED_USER_NAME); assertThat(uid).isGreaterThan(Process.FIRST_APPLICATION_UID); } @Test public void getUidForSharedUser_cannotSeeSharedUser() throws Exception { installPackage(SHARED_USER_APK_PATH, false /* forceQueryable */); final int uid = mIPackageManager.getUidForSharedUser(SHARED_USER_NAME); assertThat(uid).isEqualTo(Process.INVALID_UID); } private static void installPackage(String apkPath, boolean forceQueryable) { final StringBuilder cmd = new StringBuilder("pm install "); if (forceQueryable) { Loading
services/tests/PackageManagerServiceTests/appenumeration/test-apps/target/Android.bp +14 −0 Original line number Diff line number Diff line Loading @@ -48,3 +48,17 @@ android_test_helper_app { test_suites: ["device-tests"], platform_apis: true, } android_test_helper_app { name: "AppEnumerationSharedUserTestApp", srcs: ["src/**/*.java"], manifest: "AndroidManifest-sharedUser.xml", dex_preopt: { enabled: false, }, optimize: { enabled: false, }, test_suites: ["device-tests"], platform_apis: true, }