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

Commit ff2b059f authored by Svet Ganov's avatar Svet Ganov Committed by The Android Automerger
Browse files

Ensure per package and per UID state share same package settings.

When renaming a package during an OTA we were getting in a state
where the package setting mapped to the package UID was not the
same instance as the one we create for the new package mapped.
This leads to a drift between the permissions state for the package
and that state for the UID, resulting in broken for UID permission
checks as granted permissions were never appearing in the per UID
package setting.

bug:22928831

Change-Id: Ib0372632ec84a917304561fd94032cd09bb4c12f
parent 1dac151a
Loading
Loading
Loading
Loading
+15 −0
Original line number Original line Diff line number Diff line
@@ -616,6 +616,7 @@ final class Settings {
                p.sharedUser = origPackage.sharedUser;
                p.sharedUser = origPackage.sharedUser;
                p.appId = origPackage.appId;
                p.appId = origPackage.appId;
                p.origPackage = origPackage;
                p.origPackage = origPackage;
                p.getPermissionsState().copyFrom(origPackage.getPermissionsState());
                mRenamedPackages.put(name, origPackage.name);
                mRenamedPackages.put(name, origPackage.name);
                name = origPackage.name;
                name = origPackage.name;
                // Update new package state.
                // Update new package state.
@@ -815,6 +816,20 @@ final class Settings {
            p.sharedUser = sharedUser;
            p.sharedUser = sharedUser;
            p.appId = sharedUser.userId;
            p.appId = sharedUser.userId;
        }
        }

        // If the we know about this user id, we have to update it as it
        // has to point to the same PackageSetting instance as the package.
        Object userIdPs = getUserIdLPr(p.appId);
        if (sharedUser == null) {
            if (userIdPs != null && userIdPs != p) {
                replaceUserIdLPw(p.appId, p);
            }
        } else {
            if (userIdPs != null && userIdPs != sharedUser) {
                replaceUserIdLPw(p.appId, sharedUser);
            }
        }

        IntentFilterVerificationInfo ivi = mRestoredIntentFilterVerifications.get(name);
        IntentFilterVerificationInfo ivi = mRestoredIntentFilterVerifications.get(name);
        if (ivi != null) {
        if (ivi != null) {
            if (DEBUG_DOMAIN_VERIFICATION) {
            if (DEBUG_DOMAIN_VERIFICATION) {