Merge "Revert "Revert "Merge "Restore V2+ signature requirement for system apps" into tm-dev am: a347b6c2e6 am: 8aa6d20125""" into tm-d1-dev am: c2da54f24e am: 20adc38129
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18409337 Change-Id: Ide661c30713cf5a105ee20f4c4b95c89481994b0 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -1414,11 +1414,9 @@ public class PackageParser {
|
|||||||
final ParseTypeImpl input = ParseTypeImpl.forDefaultParsing();
|
final ParseTypeImpl input = ParseTypeImpl.forDefaultParsing();
|
||||||
final ParseResult<android.content.pm.SigningDetails> result;
|
final ParseResult<android.content.pm.SigningDetails> result;
|
||||||
if (skipVerify) {
|
if (skipVerify) {
|
||||||
// systemDir APKs are already trusted, save time by not verifying; since the signature
|
// systemDir APKs are already trusted, save time by not verifying
|
||||||
// is not verified and some system apps can have their V2+ signatures stripped allow
|
|
||||||
// pulling the certs from the jar signature.
|
|
||||||
result = ApkSignatureVerifier.unsafeGetCertsWithoutVerification(
|
result = ApkSignatureVerifier.unsafeGetCertsWithoutVerification(
|
||||||
input, apkPath, SigningDetails.SignatureSchemeVersion.JAR);
|
input, apkPath, minSignatureScheme);
|
||||||
} else {
|
} else {
|
||||||
result = ApkSignatureVerifier.verify(input, apkPath, minSignatureScheme);
|
result = ApkSignatureVerifier.verify(input, apkPath, minSignatureScheme);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4199,8 +4199,8 @@ final class InstallPackageHelper {
|
|||||||
assertOverlayIsValid(pkg, parseFlags, scanFlags);
|
assertOverlayIsValid(pkg, parseFlags, scanFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the package is not on a system partition ensure it is signed with at least the
|
// Ensure the package is signed with at least the minimum signature scheme version
|
||||||
// minimum signature scheme version required for its target SDK.
|
// required for its target SDK.
|
||||||
ScanPackageUtils.assertMinSignatureSchemeIsValid(pkg, parseFlags);
|
ScanPackageUtils.assertMinSignatureSchemeIsValid(pkg, parseFlags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -690,16 +690,14 @@ final class ScanPackageUtils {
|
|||||||
|
|
||||||
public static void assertMinSignatureSchemeIsValid(AndroidPackage pkg,
|
public static void assertMinSignatureSchemeIsValid(AndroidPackage pkg,
|
||||||
@ParsingPackageUtils.ParseFlags int parseFlags) throws PackageManagerException {
|
@ParsingPackageUtils.ParseFlags int parseFlags) throws PackageManagerException {
|
||||||
if ((parseFlags & ParsingPackageUtils.PARSE_IS_SYSTEM_DIR) == 0) {
|
int minSignatureSchemeVersion =
|
||||||
int minSignatureSchemeVersion =
|
ApkSignatureVerifier.getMinimumSignatureSchemeVersionForTargetSdk(
|
||||||
ApkSignatureVerifier.getMinimumSignatureSchemeVersionForTargetSdk(
|
pkg.getTargetSdkVersion());
|
||||||
pkg.getTargetSdkVersion());
|
if (pkg.getSigningDetails().getSignatureSchemeVersion()
|
||||||
if (pkg.getSigningDetails().getSignatureSchemeVersion()
|
< minSignatureSchemeVersion) {
|
||||||
< minSignatureSchemeVersion) {
|
throw new PackageManagerException(INSTALL_PARSE_FAILED_NO_CERTIFICATES,
|
||||||
throw new PackageManagerException(INSTALL_PARSE_FAILED_NO_CERTIFICATES,
|
"No signature found in package of version " + minSignatureSchemeVersion
|
||||||
"No signature found in package of version " + minSignatureSchemeVersion
|
+ " or newer for package " + pkg.getPackageName());
|
||||||
+ " or newer for package " + pkg.getPackageName());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3108,11 +3108,9 @@ public class ParsingPackageUtils {
|
|||||||
}
|
}
|
||||||
final ParseResult<SigningDetails> verified;
|
final ParseResult<SigningDetails> verified;
|
||||||
if (skipVerify) {
|
if (skipVerify) {
|
||||||
// systemDir APKs are already trusted, save time by not verifying; since the
|
// systemDir APKs are already trusted, save time by not verifying
|
||||||
// signature is not verified and some system apps can have their V2+ signatures
|
|
||||||
// stripped allow pulling the certs from the jar signature.
|
|
||||||
verified = ApkSignatureVerifier.unsafeGetCertsWithoutVerification(input, baseCodePath,
|
verified = ApkSignatureVerifier.unsafeGetCertsWithoutVerification(input, baseCodePath,
|
||||||
SigningDetails.SignatureSchemeVersion.JAR);
|
minSignatureScheme);
|
||||||
} else {
|
} else {
|
||||||
verified = ApkSignatureVerifier.verify(input, baseCodePath, minSignatureScheme);
|
verified = ApkSignatureVerifier.verify(input, baseCodePath, minSignatureScheme);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user