Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ea36a0c2 authored by Hai Zhang's avatar Hai Zhang Committed by Automerger Merge Worker
Browse files

DO NOT MERGE Don't allow non-instant permissions for instant apps. am: a710a304

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12366889

Change-Id: Iab47aca559ae8c13a26507827aadfc0c8b239d74
parents 46387fb1 a710a304
Loading
Loading
Loading
Loading
+20 −9
Original line number Diff line number Diff line
@@ -3344,13 +3344,10 @@ 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)) {
            if (checkPermission(Manifest.permission.INSTALL_PACKAGES,
                    rInfo.activityInfo.packageName, 0) == PERMISSION_GRANTED) {
                continue;
            }
            }
            iter.remove();
        }
        if (matches.size() == 0) {
@@ -3600,9 +3597,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.<String>emptySet() : permissionsState.getPermissions(userId);
        final PackageUserState state = ps.readUserState(userId);
        if (state.instantApp) {
            permissions = new ArraySet<>(permissions);
            permissions.removeIf(permissionName -> {
                BasePermission permission = mSettings.mPermissions.get(permissionName);
                if (permission == null) {
                    return true;
                }
                if (!permission.isInstant()) {
                    EventLog.writeEvent(0x534e4554, "140256621", UserHandle.getUid(userId,
                            ps.appId), permissionName);
                    return true;
                }
                return false;
            });
        }
        if ((flags & MATCH_UNINSTALLED_PACKAGES) != 0
                && ps.isSystem()) {
@@ -8297,10 +8309,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 {