summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Baumann <patb@google.com>2019-08-07 17:56:58 -0700
committerandroid-build-team Robot <android-build-team-robot@google.com>2019-08-08 21:25:23 +0000
commitdb5100ec6f11592c24fcba7dffcb26b6756e886c (patch)
treeb2a8ba831b6241b67766f4d6297bdd319cea2f39
parentfc638c76158a5a5a6050fe9a439785ca63880c80 (diff)
downloadbase-db5100ec6f11592c24fcba7dffcb26b6756e886c.tar.gz
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 (cherry picked from commit cf9a4835c110b3b7c064e1dde97ffb38ef0424eb)
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java13
1 files changed, 8 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index d60fa2e5c110..7469e0994210 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -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.