Fixes PM.grantImplicitAccess for multi-user

This change fixes the security check in grantImplicitAccess to support
the case that the system user does not have an installed contacts
provider.

Fixes: 169684344
Test: atest android.provider.cts.contacts.ContactsContract_DirectoryTest
Change-Id: I2c80513a5dffa7ad92963e376ea85217f127f39a
This commit is contained in:
Patrick Baumann
2020-09-29 13:22:43 -07:00
parent 2ca98d2057
commit 7494002c94

View File

@@ -25434,7 +25434,7 @@ public class PackageManagerService extends IPackageManager.Stub
// This API is exposed temporarily to only the contacts provider. (b/158688602)
final int callingUid = Binder.getCallingUid();
ProviderInfo contactsProvider = resolveContentProviderInternal(
ContactsContract.AUTHORITY, 0, UserHandle.USER_SYSTEM);
ContactsContract.AUTHORITY, 0, UserHandle.getUserId(callingUid));
if (contactsProvider == null || contactsProvider.applicationInfo == null
|| !UserHandle.isSameApp(contactsProvider.applicationInfo.uid, callingUid)) {
throw new SecurityException(callingUid + " is not allow to call grantImplicitAccess");