From eaac1801890d609189ee4cab4f998f8cd05c465e Mon Sep 17 00:00:00 2001 From: Songchun Fan Date: Fri, 19 Nov 2021 00:07:41 +0000 Subject: [PATCH] [pm] revert mLock changes for compat seinfo This partially reverts ag/16176950. Because we need to modify SeInfo, it is not a read-only usage of PackageState. BUG: 206662650 Test: atest com.android.cts.appcompat.CompatChangesSelinuxTest#testTargetSdkRAppIsInLatestDomainWithLatestOptin Change-Id: I7260f7ef0c09669fe25f0313cc1517c56f4eaed8 --- .../server/pm/PackageManagerService.java | 19 +++++++++++-------- 1 file changed, 11 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 ab01961517f4b..cf4713c032334 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -1500,16 +1500,19 @@ public class PackageManagerService extends IPackageManager.Stub final CompatChange.ChangeListener selinuxChangeListener = packageName -> { synchronized (m.mInstallLock) { final AndroidPackage pkg; + final PackageSetting ps; final SharedUserSetting sharedUser; final String oldSeInfo; - final PackageStateInternal packageState = m.getPackageStateInternal(packageName); - if (packageState == null) { - Slog.e(TAG, "Failed to find package setting " + packageName); - return; + synchronized (m.mLock) { + ps = m.mSettings.getPackageLPr(packageName); + if (ps == null) { + Slog.e(TAG, "Failed to find package setting " + packageName); + return; + } + pkg = ps.getPkg(); + sharedUser = ps.getSharedUser(); + oldSeInfo = AndroidPackageUtils.getSeInfo(pkg, ps); } - pkg = packageState.getPkg(); - sharedUser = packageState.getSharedUser(); - oldSeInfo = AndroidPackageUtils.getSeInfo(pkg, packageState); if (pkg == null) { Slog.e(TAG, "Failed to find package " + packageName); @@ -1521,7 +1524,7 @@ public class PackageManagerService extends IPackageManager.Stub if (!newSeInfo.equals(oldSeInfo)) { Slog.i(TAG, "Updating seInfo for package " + packageName + " from: " + oldSeInfo + " to: " + newSeInfo); - packageState.getTransientState().setOverrideSeInfo(newSeInfo); + ps.getPkgState().setOverrideSeInfo(newSeInfo); m.mAppDataHelper.prepareAppDataAfterInstallLIF(pkg); } }