Skip to content

Commit 043a322

Browse files
DO NOT MERGE Don't allow non-instant permissions for instant apps. am: a710a30 am: ea36a0c
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12366889 Change-Id: Id791215e99e121b996892c5c06d9a54a5b7f691d
2 parents 78c2d2c + ea36a0c commit 043a322

1 file changed

Lines changed: 20 additions & 9 deletions

File tree

services/core/java/com/android/server/pm/PackageManagerService.java

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3631,12 +3631,9 @@ public boolean isUpgrade() {
36313631
Iterator<ResolveInfo> iter = matches.iterator();
36323632
while (iter.hasNext()) {
36333633
final ResolveInfo rInfo = iter.next();
3634-
final PackageSetting ps = mSettings.mPackages.get(rInfo.activityInfo.packageName);
3635-
if (ps != null) {
3636-
final PermissionsState permissionsState = ps.getPermissionsState();
3637-
if (permissionsState.hasPermission(Manifest.permission.INSTALL_PACKAGES, 0)) {
3638-
continue;
3639-
}
3634+
if (checkPermission(Manifest.permission.INSTALL_PACKAGES,
3635+
rInfo.activityInfo.packageName, 0) == PERMISSION_GRANTED) {
3636+
continue;
36403637
}
36413638
iter.remove();
36423639
}
@@ -3884,9 +3881,24 @@ private PackageInfo generatePackageInfo(PackageSetting ps, int flags, int userId
38843881
final int[] gids = (flags & PackageManager.GET_GIDS) == 0
38853882
? EMPTY_INT_ARRAY : permissionsState.computeGids(userId);
38863883
// Compute granted permissions only if package has requested permissions
3887-
final Set<String> permissions = ArrayUtils.isEmpty(p.requestedPermissions)
3884+
Set<String> permissions = ArrayUtils.isEmpty(p.requestedPermissions)
38883885
? Collections.<String>emptySet() : permissionsState.getPermissions(userId);
38893886
final PackageUserState state = ps.readUserState(userId);
3887+
if (state.instantApp) {
3888+
permissions = new ArraySet<>(permissions);
3889+
permissions.removeIf(permissionName -> {
3890+
BasePermission permission = mSettings.mPermissions.get(permissionName);
3891+
if (permission == null) {
3892+
return true;
3893+
}
3894+
if (!permission.isInstant()) {
3895+
EventLog.writeEvent(0x534e4554, "140256621", UserHandle.getUid(userId,
3896+
ps.appId), permissionName);
3897+
return true;
3898+
}
3899+
return false;
3900+
});
3901+
}
38903902

38913903
if ((flags & MATCH_UNINSTALLED_PACKAGES) != 0
38923904
&& ps.isSystem()) {
@@ -8702,10 +8714,9 @@ public ParceledListSlice<PackageInfo> getInstalledPackages(int flags, int userId
87028714
private void addPackageHoldingPermissions(ArrayList<PackageInfo> list, PackageSetting ps,
87038715
String[] permissions, boolean[] tmp, int flags, int userId) {
87048716
int numMatch = 0;
8705-
final PermissionsState permissionsState = ps.getPermissionsState();
87068717
for (int i=0; i<permissions.length; i++) {
87078718
final String permission = permissions[i];
8708-
if (permissionsState.hasPermission(permission, userId)) {
8719+
if (checkPermission(permission, ps.name, userId) == PERMISSION_GRANTED) {
87098720
tmp[i] = true;
87108721
numMatch++;
87118722
} else {

0 commit comments

Comments
 (0)