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

Commit c7d576e2 authored by Elisa Pascual Trevino's avatar Elisa Pascual Trevino Committed by android-build-team Robot
Browse files

Revert "RESTRICT AUTOMERGE: Revoke permissions defined in a to-be removed package."

This reverts commit fde94783.

Reason for revert: b/111752150

Change-Id: Ifc60261cd78e606e01f7a68626a1710699ff7bc7
(cherry picked from commit 307c6c50a7b374b4ab034560bb67a204071b5bca)
parent 841930e1
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -12344,8 +12344,7 @@ public class PackageManagerService extends IPackageManager.Stub
            if (DEBUG_REMOVE) Log.d(TAG, "  Activities: " + r);
        }
        final ArrayList<String> allPackageNames = new ArrayList<>(mPackages.keySet());
        mPermissionManager.removeAllPermissions(pkg, allPackageNames, mPermissionCallback, chatty);
        mPermissionManager.removeAllPermissions(pkg, chatty);
        N = pkg.instrumentation.size();
        r = null;
+2 −6
Original line number Diff line number Diff line
@@ -115,11 +115,7 @@ public abstract class PermissionManagerInternal {
     */
    public abstract void addAllPermissions(@NonNull PackageParser.Package pkg, boolean chatty);
    public abstract void addAllPermissionGroups(@NonNull PackageParser.Package pkg, boolean chatty);
    public abstract void removeAllPermissions(
            @NonNull PackageParser.Package pkg,
            @NonNull List<String> allPackageNames,
            @Nullable PermissionCallback permissionCallback,
            boolean chatty);
    public abstract void removeAllPermissions(@NonNull PackageParser.Package pkg, boolean chatty);
    public abstract boolean addDynamicPermission(@NonNull PermissionInfo info, boolean async,
            int callingUid, @Nullable PermissionCallback callback);
    public abstract void removeDynamicPermission(@NonNull String permName, int callingUid,
+10 −71
Original line number Diff line number Diff line
@@ -30,7 +30,6 @@ import android.Manifest;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManagerInternal;
import android.content.pm.PackageParser;
@@ -38,7 +37,6 @@ import android.content.pm.PermissionGroupInfo;
import android.content.pm.PermissionInfo;
import android.content.pm.PackageParser.Package;
import android.metrics.LogMaker;
import android.os.AsyncTask;
import android.os.Binder;
import android.os.Build;
import android.os.Handler;
@@ -457,9 +455,8 @@ public class PermissionManagerService {
                                        " to " + newPermissionGroupName);

                                try {
                                    revokeRuntimePermission(permissionName, packageName,
                                            mSettings.getPermission(permissionName), false,
                                            Process.SYSTEM_UID, userId, permissionCallback, false);
                                    revokeRuntimePermission(permissionName, packageName, false,
                                            Process.SYSTEM_UID, userId, permissionCallback);
                                } catch (IllegalArgumentException e) {
                                    Slog.e(TAG, "Could not revoke " + permissionName + " from "
                                            + packageName, e);
@@ -552,59 +549,9 @@ public class PermissionManagerService {

    }

    private void revokeAllPermissions(
            @NonNull List<BasePermission> bps,
            @NonNull List<String> allPackageNames,
            @Nullable PermissionCallback permissionCallback) {
        AsyncTask.execute(() -> {
            final int numRemovedPermissions = bps.size();
            for (int permissionNum = 0; permissionNum < numRemovedPermissions; permissionNum++) {
                final int[] userIds = mUserManagerInt.getUserIds();
                final int numUserIds = userIds.length;

                final int numPackages = allPackageNames.size();
                for (int packageNum = 0; packageNum < numPackages; packageNum++) {
                    final String packageName = allPackageNames.get(packageNum);
                    final ApplicationInfo applicationInfo = mPackageManagerInt.getApplicationInfo(
                            packageName, 0, Process.SYSTEM_UID, UserHandle.USER_SYSTEM);
                    if (applicationInfo != null
                            && applicationInfo.targetSdkVersion < Build.VERSION_CODES.M) {
                        continue;
                    }
                    for (int userIdNum = 0; userIdNum < numUserIds; userIdNum++) {
                        final int userId = userIds[userIdNum];
                        final String permissionName = bps.get(permissionNum).getName();
                        if (checkPermission(permissionName, packageName, UserHandle.USER_SYSTEM,
                                userId) == PackageManager.PERMISSION_GRANTED) {
                            try {
                                revokeRuntimePermission(
                                        permissionName,
                                        packageName,
                                        bps.get(permissionNum),
                                        false,
                                        Process.SYSTEM_UID,
                                        userId,
                                        permissionCallback,
                                        true);
                            } catch (IllegalArgumentException e) {
                                Slog.e(TAG, "Could not revoke " + permissionName + " from "
                                        + packageName, e);
                            }
                        }
                    }
                }
            }
        });
    }

    private void removeAllPermissions(
            @NonNull PackageParser.Package pkg,
            @NonNull List<String> allPackageNames,
            @Nullable PermissionCallback permissionCallback,
            boolean chatty) {
    private void removeAllPermissions(PackageParser.Package pkg, boolean chatty) {
        synchronized (mLock) {
            int N = pkg.permissions.size();
            List<BasePermission> bps = new ArrayList<BasePermission>(N);
            StringBuilder r = null;
            for (int i=0; i<N; i++) {
                PackageParser.Permission p = pkg.permissions.get(i);
@@ -613,9 +560,6 @@ public class PermissionManagerService {
                    bp = mSettings.mPermissionTrees.get(p.info.name);
                }
                if (bp != null && bp.isPermission(p)) {
                    if ((p.info.getProtection() & PermissionInfo.PROTECTION_DANGEROUS) != 0) {
                        bps.add(bp);
                    }
                    bp.setPermission(null);
                    if (DEBUG_REMOVE && chatty) {
                        if (r == null) {
@@ -634,7 +578,6 @@ public class PermissionManagerService {
                    }
                }
            }
            revokeAllPermissions(bps, allPackageNames, permissionCallback);
            if (r != null) {
                if (DEBUG_REMOVE) Log.d(TAG, "  Permissions: " + r);
            }
@@ -1548,9 +1491,8 @@ public class PermissionManagerService {

    }

    private void revokeRuntimePermission(String permName, String packageName, BasePermission bp,
            boolean overridePolicy, int callingUid, int userId, PermissionCallback callback,
            boolean permissionRemoved) {
    private void revokeRuntimePermission(String permName, String packageName,
            boolean overridePolicy, int callingUid, int userId, PermissionCallback callback) {
        if (!mUserManagerInt.exists(userId)) {
            Log.e(TAG, "No such user:" + userId);
            return;
@@ -1575,7 +1517,7 @@ public class PermissionManagerService {
        if (mPackageManagerInt.filterAppAccess(pkg, Binder.getCallingUid(), userId)) {
            throw new IllegalArgumentException("Unknown package: " + packageName);
        }

        final BasePermission bp = mSettings.getPermissionLocked(permName);
        if (bp == null) {
            throw new IllegalArgumentException("Unknown permission: " + permName);
        }
@@ -2131,10 +2073,8 @@ public class PermissionManagerService {
            PermissionManagerService.this.addAllPermissionGroups(pkg, chatty);
        }
        @Override
        public void removeAllPermissions(Package pkg, List<String> allPackageNames,
                PermissionCallback permissionCallback, boolean chatty) {
            PermissionManagerService.this.removeAllPermissions(
                    pkg, allPackageNames, permissionCallback, chatty);
        public void removeAllPermissions(Package pkg, boolean chatty) {
            PermissionManagerService.this.removeAllPermissions(pkg, chatty);
        }
        @Override
        public boolean addDynamicPermission(PermissionInfo info, boolean async, int callingUid,
@@ -2170,8 +2110,7 @@ public class PermissionManagerService {
                boolean overridePolicy, int callingUid, int userId,
                PermissionCallback callback) {
            PermissionManagerService.this.revokeRuntimePermission(permName, packageName,
                    mSettings.getPermission(permName), overridePolicy, callingUid, userId,
                    callback, false);
                    overridePolicy, callingUid, userId, callback);
        }
        @Override
        public void updatePermissions(String packageName, Package pkg, boolean replaceGrant,