summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Baumann <patb@google.com>2019-08-07 17:56:58 -0700
committerPatrick Baumann <patb@google.com>2019-08-07 19:25:02 -0700
commitcf9a4835c110b3b7c064e1dde97ffb38ef0424eb (patch)
tree6530914f885b14ec1bab0d0067bd8e3f602ee52c
parent6aa3f38983dc35509615acd31066e766ede9d608 (diff)
downloadbase-cf9a4835c110b3b7c064e1dde97ffb38ef0424eb.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
-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.