DO NOT MERGE Don't allow non-instant permissions for instant apps.
Bug: 140256621 Test: atest EphemeralTest Change-Id: Id07342c0347c0b4d2ccb3f58a4af9fda7a20d6ef
This commit is contained in:
@@ -3902,13 +3902,9 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
Iterator<ResolveInfo> iter = matches.iterator();
|
||||
while (iter.hasNext()) {
|
||||
final ResolveInfo rInfo = iter.next();
|
||||
final PackageSetting ps = mSettings.mPackages.get(rInfo.activityInfo.packageName);
|
||||
if (ps != null) {
|
||||
final PermissionsState permissionsState = ps.getPermissionsState();
|
||||
if (permissionsState.hasPermission(Manifest.permission.INSTALL_PACKAGES, 0)
|
||||
|| Build.IS_ENG) {
|
||||
continue;
|
||||
}
|
||||
if (checkPermission(Manifest.permission.INSTALL_PACKAGES,
|
||||
rInfo.activityInfo.packageName, 0) == PERMISSION_GRANTED || Build.IS_ENG) {
|
||||
continue;
|
||||
}
|
||||
iter.remove();
|
||||
}
|
||||
@@ -4084,8 +4080,24 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
final int[] gids = (flags & PackageManager.GET_GIDS) == 0
|
||||
? EMPTY_INT_ARRAY : permissionsState.computeGids(userId);
|
||||
// Compute granted permissions only if package has requested permissions
|
||||
final Set<String> permissions = ArrayUtils.isEmpty(p.requestedPermissions)
|
||||
Set<String> permissions = ArrayUtils.isEmpty(p.requestedPermissions)
|
||||
? Collections.emptySet() : permissionsState.getPermissions(userId);
|
||||
if (state.instantApp) {
|
||||
permissions = new ArraySet<>(permissions);
|
||||
permissions.removeIf(permissionName -> {
|
||||
BasePermission permission = mPermissionManager.getPermissionTEMP(
|
||||
permissionName);
|
||||
if (permission == null) {
|
||||
return true;
|
||||
}
|
||||
if (!permission.isInstant()) {
|
||||
EventLog.writeEvent(0x534e4554, "140256621", UserHandle.getUid(userId,
|
||||
ps.appId), permissionName);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
PackageInfo packageInfo = PackageParser.generatePackageInfo(p, gids, flags,
|
||||
ps.firstInstallTime, ps.lastUpdateTime, permissions, state, userId);
|
||||
@@ -8569,10 +8581,9 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
private void addPackageHoldingPermissions(ArrayList<PackageInfo> list, PackageSetting ps,
|
||||
String[] permissions, boolean[] tmp, int flags, int userId) {
|
||||
int numMatch = 0;
|
||||
final PermissionsState permissionsState = ps.getPermissionsState();
|
||||
for (int i=0; i<permissions.length; i++) {
|
||||
final String permission = permissions[i];
|
||||
if (permissionsState.hasPermission(permission, userId)) {
|
||||
if (checkPermission(permission, ps.name, userId) == PERMISSION_GRANTED) {
|
||||
tmp[i] = true;
|
||||
numMatch++;
|
||||
} else {
|
||||
@@ -19509,7 +19520,8 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
}
|
||||
|
||||
final int userId = user == null ? UserHandle.USER_ALL : user.getIdentifier();
|
||||
if (ps.getPermissionsState().hasPermission(Manifest.permission.SUSPEND_APPS, userId)) {
|
||||
if (checkPermission(Manifest.permission.SUSPEND_APPS, packageName, userId)
|
||||
== PERMISSION_GRANTED) {
|
||||
unsuspendForSuspendingPackage(packageName, userId);
|
||||
}
|
||||
if ((!systemApp || (flags & PackageManager.DELETE_SYSTEM_APP) != 0)
|
||||
|
||||
Reference in New Issue
Block a user