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

Commit 315c4ac1 authored by Svet Ganov's avatar Svet Ganov
Browse files

Keep default permission grants uninstalling a sys package upgrade

bug:22665508

Change-Id: I1cb1e53a8643ddad77f0be9e40d5b504501e06de
parent 1d071ce9
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -3605,10 +3605,14 @@ public class PackageManagerService extends IPackageManager.Stub {
        enforceCrossUserPermission(Binder.getCallingUid(), userId, true, false,
                "updatePermissionFlags");
        // Only the system can change system fixed flags.
        // Only the system can change these flags and nothing else.
        if (getCallingUid() != Process.SYSTEM_UID) {
            flagMask &= ~PackageManager.FLAG_PERMISSION_SYSTEM_FIXED;
            flagValues &= ~PackageManager.FLAG_PERMISSION_SYSTEM_FIXED;
            flagMask &= ~PackageManager.FLAG_PERMISSION_POLICY_FIXED;
            flagValues &= ~PackageManager.FLAG_PERMISSION_POLICY_FIXED;
            flagMask &= ~PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT;
            flagValues &= ~PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT;
        }
        synchronized (mPackages) {
@@ -12923,10 +12927,6 @@ public class PackageManagerService extends IPackageManager.Stub {
        synchronized (mPackages) {
            PackageSetting ps = mSettings.mPackages.get(newPkg.packageName);
            // Propagate the permissions state as we do want to drop on the floor
            // runtime permissions. The update permissions method below will take
            // care of removing obsolete permissions and grant install permissions.
            ps.getPermissionsState().copyFrom(disabledPs.getPermissionsState());
            updatePermissionsLPw(newPkg.packageName, newPkg,
                    UPDATE_PERMISSIONS_ALL | UPDATE_PERMISSIONS_REPLACE_PKG);
@@ -12940,6 +12940,8 @@ public class PackageManagerService extends IPackageManager.Stub {
                                + " => " + perUserInstalled[i]);
                    }
                    ps.setInstalled(perUserInstalled[i], allUserHandles[i]);
                    mSettings.writeRuntimePermissionsForUserLPr(allUserHandles[i], false);
                }
                // Regardless of writeSettings we need to ensure that this restriction
                // state propagation is persisted