Merge "Enforce package visibility filter on the SharedLibraryInfo" into sc-dev
This commit is contained in:
@@ -8472,7 +8472,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
libInfo.getPackageName(), libInfo.getAllCodePaths(),
|
libInfo.getPackageName(), libInfo.getAllCodePaths(),
|
||||||
libInfo.getName(), libInfo.getLongVersion(),
|
libInfo.getName(), libInfo.getLongVersion(),
|
||||||
libInfo.getType(), libInfo.getDeclaringPackage(),
|
libInfo.getType(), libInfo.getDeclaringPackage(),
|
||||||
getPackagesUsingSharedLibraryLPr(libInfo, flags, userId),
|
getPackagesUsingSharedLibraryLPr(libInfo, flags, callingUid, userId),
|
||||||
(libInfo.getDependencies() == null
|
(libInfo.getDependencies() == null
|
||||||
? null
|
? null
|
||||||
: new ArrayList<>(libInfo.getDependencies())),
|
: new ArrayList<>(libInfo.getDependencies())),
|
||||||
@@ -8544,8 +8544,10 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
libraryInfo.getPath(), libraryInfo.getPackageName(),
|
libraryInfo.getPath(), libraryInfo.getPackageName(),
|
||||||
libraryInfo.getAllCodePaths(), libraryInfo.getName(),
|
libraryInfo.getAllCodePaths(), libraryInfo.getName(),
|
||||||
libraryInfo.getLongVersion(), libraryInfo.getType(),
|
libraryInfo.getLongVersion(), libraryInfo.getType(),
|
||||||
libraryInfo.getDeclaringPackage(), getPackagesUsingSharedLibraryLPr(
|
libraryInfo.getDeclaringPackage(),
|
||||||
libraryInfo, flags, userId), libraryInfo.getDependencies() == null
|
getPackagesUsingSharedLibraryLPr(
|
||||||
|
libraryInfo, flags, callingUid, userId),
|
||||||
|
libraryInfo.getDependencies() == null
|
||||||
? null : new ArrayList<>(libraryInfo.getDependencies()),
|
? null : new ArrayList<>(libraryInfo.getDependencies()),
|
||||||
libraryInfo.isNative());
|
libraryInfo.isNative());
|
||||||
|
|
||||||
@@ -8562,7 +8564,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
|
|
||||||
@GuardedBy("mLock")
|
@GuardedBy("mLock")
|
||||||
private List<VersionedPackage> getPackagesUsingSharedLibraryLPr(
|
private List<VersionedPackage> getPackagesUsingSharedLibraryLPr(
|
||||||
SharedLibraryInfo libInfo, int flags, int userId) {
|
SharedLibraryInfo libInfo, int flags, int callingUid, int userId) {
|
||||||
List<VersionedPackage> versionedPackages = null;
|
List<VersionedPackage> versionedPackages = null;
|
||||||
final int packageCount = mSettings.getPackagesLocked().size();
|
final int packageCount = mSettings.getPackagesLocked().size();
|
||||||
for (int i = 0; i < packageCount; i++) {
|
for (int i = 0; i < packageCount; i++) {
|
||||||
@@ -8585,6 +8587,9 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
if (ps.usesStaticLibrariesVersions[libIdx] != libInfo.getLongVersion()) {
|
if (ps.usesStaticLibrariesVersions[libIdx] != libInfo.getLongVersion()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (shouldFilterApplicationLocked(ps, callingUid, userId)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (versionedPackages == null) {
|
if (versionedPackages == null) {
|
||||||
versionedPackages = new ArrayList<>();
|
versionedPackages = new ArrayList<>();
|
||||||
}
|
}
|
||||||
@@ -8597,6 +8602,9 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
} else if (ps.pkg != null) {
|
} else if (ps.pkg != null) {
|
||||||
if (ArrayUtils.contains(ps.pkg.getUsesLibraries(), libName)
|
if (ArrayUtils.contains(ps.pkg.getUsesLibraries(), libName)
|
||||||
|| ArrayUtils.contains(ps.pkg.getUsesOptionalLibraries(), libName)) {
|
|| ArrayUtils.contains(ps.pkg.getUsesOptionalLibraries(), libName)) {
|
||||||
|
if (shouldFilterApplicationLocked(ps, callingUid, userId)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (versionedPackages == null) {
|
if (versionedPackages == null) {
|
||||||
versionedPackages = new ArrayList<>();
|
versionedPackages = new ArrayList<>();
|
||||||
}
|
}
|
||||||
@@ -14321,7 +14329,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
// Remove the shared library overlays from its dependent packages.
|
// Remove the shared library overlays from its dependent packages.
|
||||||
for (int currentUserId : UserManagerService.getInstance().getUserIds()) {
|
for (int currentUserId : UserManagerService.getInstance().getUserIds()) {
|
||||||
final List<VersionedPackage> dependents = getPackagesUsingSharedLibraryLPr(
|
final List<VersionedPackage> dependents = getPackagesUsingSharedLibraryLPr(
|
||||||
libraryInfo, 0, currentUserId);
|
libraryInfo, 0, Process.SYSTEM_UID, currentUserId);
|
||||||
if (dependents == null) {
|
if (dependents == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -20684,7 +20692,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
List<VersionedPackage> libClientPackages = getPackagesUsingSharedLibraryLPr(
|
List<VersionedPackage> libClientPackages = getPackagesUsingSharedLibraryLPr(
|
||||||
libraryInfo, MATCH_KNOWN_PACKAGES, currUserId);
|
libraryInfo, MATCH_KNOWN_PACKAGES, Process.SYSTEM_UID, currUserId);
|
||||||
if (!ArrayUtils.isEmpty(libClientPackages)) {
|
if (!ArrayUtils.isEmpty(libClientPackages)) {
|
||||||
Slog.w(TAG, "Not removing package " + pkg.getManifestPackageName()
|
Slog.w(TAG, "Not removing package " + pkg.getManifestPackageName()
|
||||||
+ " hosting lib " + libraryInfo.getName() + " version "
|
+ " hosting lib " + libraryInfo.getName() + " version "
|
||||||
@@ -26795,7 +26803,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
final List<VersionedPackage> dependents = getPackagesUsingSharedLibraryLPr(
|
final List<VersionedPackage> dependents = getPackagesUsingSharedLibraryLPr(
|
||||||
info, 0, userId);
|
info, 0, Process.SYSTEM_UID, userId);
|
||||||
if (dependents == null) {
|
if (dependents == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user