diff options
| author | 2017-05-15 02:48:22 -0700 | |
|---|---|---|
| committer | 2017-05-15 11:13:29 +0000 | |
| commit | 5ef1cefd6eaa2485fea5ed606b3b4d86374e7294 (patch) | |
| tree | 98f141d4d3903666fb6dd2e82a5ed8a3ee62fff6 | |
| parent | 54a3ce2d0ea0639514ab81a1df233fd12f5eade6 (diff) | |
Hadler USER_ALL when uninstalling static shared lib
Test: manual - cannot uninstall an lib with cross user dependency
All static shared lib CTS tests pass
bug:36632264
Change-Id: Idd11405b27ccd8cacc2a50814e1317356689b7d1
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 0173533d9594..32013851fb67 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -17973,22 +17973,30 @@ public class PackageManagerService extends IPackageManager.Stub // Static shared libs can be declared by any package, so let us not // allow removing a package if it provides a lib others depend on. pkg = mPackages.get(packageName); + + allUsers = sUserManager.getUserIds(); + if (pkg != null && pkg.staticSharedLibName != null) { SharedLibraryEntry libEntry = getSharedLibraryEntryLPr(pkg.staticSharedLibName, pkg.staticSharedLibVersion); if (libEntry != null) { - List<VersionedPackage> libClientPackages = getPackagesUsingSharedLibraryLPr( - libEntry.info, 0, userId); - if (!ArrayUtils.isEmpty(libClientPackages)) { - Slog.w(TAG, "Not removing package " + pkg.manifestPackageName - + " hosting lib " + libEntry.info.getName() + " version " - + libEntry.info.getVersion() + " used by " + libClientPackages); - return PackageManager.DELETE_FAILED_USED_SHARED_LIBRARY; + for (int currUserId : allUsers) { + if (userId != UserHandle.USER_ALL && userId != currUserId) { + continue; + } + List<VersionedPackage> libClientPackages = getPackagesUsingSharedLibraryLPr( + libEntry.info, 0, currUserId); + if (!ArrayUtils.isEmpty(libClientPackages)) { + Slog.w(TAG, "Not removing package " + pkg.manifestPackageName + + " hosting lib " + libEntry.info.getName() + " version " + + libEntry.info.getVersion() + " used by " + libClientPackages + + " for user " + currUserId); + return PackageManager.DELETE_FAILED_USED_SHARED_LIBRARY; + } } } } - allUsers = sUserManager.getUserIds(); info.origUsers = uninstalledPs.queryInstalledUsers(allUsers, true); } |