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

Commit cf9a4835 authored by Patrick Baumann's avatar Patrick Baumann
Browse files

Cleans up sharedUser regardless of creation logic

Prior to this change, we were not updating the shared user a package
setting belongs to if the package setting was not deep copied. In the
case that shared users didn't match, we were not deep copying and so
were not updating later. There is a more fundamental change to be made
here, but we're limiting risk by keeping this change as small as
possible.

Bug: 138919405
Test: atest AppSecurityTests
Test: manual; flash P then flash this build: observe consistent PackageSettings
Change-Id: Ib22f9e6a1fb3104bec4eb3e5b1de983e19d49dce
parent 6aa3f389
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -320,7 +320,6 @@ import com.android.server.pm.permission.PermissionManagerServiceInternal;
import com.android.server.pm.permission.PermissionManagerServiceInternal.PermissionCallback;
import com.android.server.pm.permission.PermissionsState;
import com.android.server.policy.PermissionPolicyInternal;
import com.android.server.policy.PermissionPolicyInternal.OnInitializedCallback;
import com.android.server.security.VerityUtils;
import com.android.server.storage.DeviceStorageMonitorInternal;
import com.android.server.wm.ActivityTaskManagerInternal;
@@ -11033,14 +11032,15 @@ public class PackageManagerService extends IPackageManager.Stub
        final String realPkgName = request.realPkgName;
        final List<String> changedAbiCodePath = result.changedAbiCodePath;
        final PackageSetting pkgSetting;
        if (request.pkgSetting != null && request.pkgSetting.sharedUser != null
                && request.pkgSetting.sharedUser != result.pkgSetting.sharedUser) {
            // shared user changed, remove from old shared user
            request.pkgSetting.sharedUser.removePackage(request.pkgSetting);
        }
        if (result.existingSettingCopied) {
            pkgSetting = request.pkgSetting;
            pkgSetting.updateFrom(result.pkgSetting);
            pkg.mExtras = pkgSetting;
            if (pkgSetting.sharedUser != null
                    && pkgSetting.sharedUser.removePackage(result.pkgSetting)) {
                pkgSetting.sharedUser.addPackage(pkgSetting);
            }
        } else {
            pkgSetting = result.pkgSetting;
            if (originalPkgSetting != null) {
@@ -11050,6 +11050,9 @@ public class PackageManagerService extends IPackageManager.Stub
                mTransferedPackages.add(originalPkgSetting.name);
            }
        }
        if (pkgSetting.sharedUser != null) {
            pkgSetting.sharedUser.addPackage(pkgSetting);
        }
        // TODO(toddke): Consider a method specifically for modifying the Package object
        // post scan; or, moving this stuff out of the Package object since it has nothing
        // to do with the package on disk.