Merge "Installation fail for mismatched certificates."

This commit is contained in:
Alex Buynytskyy
2022-01-19 00:42:27 +00:00
committed by Android (Google) Code Review
3 changed files with 29 additions and 8 deletions

View File

@@ -1207,17 +1207,33 @@ final class InstallPackageHelper {
}
PackageSetting ps = mPm.mSettings.getPackageLPr(pkgName);
if (ps != null) {
if (DEBUG_INSTALL) Slog.d(TAG, "Existing package: " + ps);
PackageSetting signatureCheckPs = ps;
// SDK libs can have other major versions with different package names.
if (signatureCheckPs == null && parsedPackage.isSdkLibrary()) {
WatchedLongSparseArray<SharedLibraryInfo> libraryInfos =
mSharedLibraries.getSharedLibraryInfos(
parsedPackage.getSdkLibName());
if (libraryInfos != null && libraryInfos.size() > 0) {
// Any existing version would do.
SharedLibraryInfo libraryInfo = libraryInfos.valueAt(0);
signatureCheckPs = mPm.mSettings.getPackageLPr(libraryInfo.getPackageName());
}
}
if (signatureCheckPs != null) {
if (DEBUG_INSTALL) {
Slog.d(TAG,
"Existing package for signature checking: " + signatureCheckPs);
}
// Static shared libs have same package with different versions where
// we internally use a synthetic package name to allow multiple versions
// of the same package, therefore we need to compare signatures against
// the package setting for the latest library version.
PackageSetting signatureCheckPs = ps;
if (parsedPackage.isStaticSharedLibrary()) {
SharedLibraryInfo libraryInfo = mSharedLibraries.getLatestSharedLibraVersionLPr(
parsedPackage);
SharedLibraryInfo libraryInfo =
mSharedLibraries.getLatestStaticSharedLibraVersionLPr(parsedPackage);
if (libraryInfo != null) {
signatureCheckPs = mPm.mSettings.getPackageLPr(
libraryInfo.getPackageName());
@@ -1256,6 +1272,10 @@ final class InstallPackageHelper {
throw new PrepareFailure(e.error, e.getMessage());
}
}
}
if (ps != null) {
if (DEBUG_INSTALL) Slog.d(TAG, "Existing package: " + ps);
if (ps.getPkg() != null) {
systemApp = ps.getPkg().isSystem();

View File

@@ -384,7 +384,7 @@ public final class SharedLibrariesImpl implements SharedLibrariesRead, Watchable
* @return The latest version of shared library info.
*/
@GuardedBy("mPm.mLock")
@Nullable SharedLibraryInfo getLatestSharedLibraVersionLPr(@NonNull AndroidPackage pkg) {
@Nullable SharedLibraryInfo getLatestStaticSharedLibraVersionLPr(@NonNull AndroidPackage pkg) {
WatchedLongSparseArray<SharedLibraryInfo> versionedLib = mSharedLibraries.get(
pkg.getStaticSharedLibName());
if (versionedLib == null) {
@@ -416,7 +416,7 @@ public final class SharedLibrariesImpl implements SharedLibrariesRead, Watchable
PackageSetting sharedLibPackage = null;
synchronized (mPm.mLock) {
final SharedLibraryInfo latestSharedLibraVersionLPr =
getLatestSharedLibraVersionLPr(scanResult.mRequest.mParsedPackage);
getLatestStaticSharedLibraVersionLPr(scanResult.mRequest.mParsedPackage);
if (latestSharedLibraVersionLPr != null) {
sharedLibPackage = mPm.mSettings.getPackageLPr(
latestSharedLibraVersionLPr.getPackageName());

View File

@@ -196,7 +196,8 @@ class SharedLibrariesImplTest {
val newLibSetting = addPackage(STATIC_LIB_PACKAGE_NAME + "_" + 10, 10L,
staticLibrary = STATIC_LIB_NAME, staticLibraryVersion = 10L)
val latestInfo = mSharedLibrariesImpl.getLatestSharedLibraVersionLPr(newLibSetting.pkg)!!
val latestInfo =
mSharedLibrariesImpl.getLatestStaticSharedLibraVersionLPr(newLibSetting.pkg)!!
assertThat(latestInfo).isNotNull()
assertThat(latestInfo.name).isEqualTo(STATIC_LIB_NAME)