Merge "Trigger data wipe on spl-downgrade as well"

This commit is contained in:
Treehugger Robot 2021-03-12 18:50:38 +00:00 committed by Gerrit Code Review
commit b7ade64e3f
1 changed files with 38 additions and 32 deletions

View File

@ -297,8 +297,6 @@ SECONDARY_PAYLOAD_SKIPPED_IMAGES = [
'vendor_boot'] 'vendor_boot']
class PayloadSigner(object): class PayloadSigner(object):
"""A class that wraps the payload signing works. """A class that wraps the payload signing works.
@ -765,10 +763,12 @@ def GetTargetFilesZipWithoutPostinstallConfig(input_file):
common.ZipDelete(target_file, POSTINSTALL_CONFIG) common.ZipDelete(target_file, POSTINSTALL_CONFIG)
return target_file return target_file
def ParseInfoDict(target_file_path): def ParseInfoDict(target_file_path):
with zipfile.ZipFile(target_file_path, 'r', allowZip64=True) as zfp: with zipfile.ZipFile(target_file_path, 'r', allowZip64=True) as zfp:
return common.LoadInfoDict(zfp) return common.LoadInfoDict(zfp)
def GetTargetFilesZipForPartialUpdates(input_file, ab_partitions): def GetTargetFilesZipForPartialUpdates(input_file, ab_partitions):
"""Returns a target-files.zip for partial ota update package generation. """Returns a target-files.zip for partial ota update package generation.
@ -963,12 +963,14 @@ def GetTargetFilesZipForCustomImagesUpdates(input_file, custom_images):
return target_file return target_file
def GeneratePartitionTimestampFlags(partition_state): def GeneratePartitionTimestampFlags(partition_state):
partition_timestamps = [ partition_timestamps = [
part.partition_name + ":" + part.version part.partition_name + ":" + part.version
for part in partition_state] for part in partition_state]
return ["--partition_timestamps", ",".join(partition_timestamps)] return ["--partition_timestamps", ",".join(partition_timestamps)]
def GeneratePartitionTimestampFlagsDowngrade( def GeneratePartitionTimestampFlagsDowngrade(
pre_partition_state, post_partition_state): pre_partition_state, post_partition_state):
assert pre_partition_state is not None assert pre_partition_state is not None
@ -980,15 +982,18 @@ def GeneratePartitionTimestampFlagsDowngrade(
max(part.version, partition_timestamps[part.partition_name]) max(part.version, partition_timestamps[part.partition_name])
return [ return [
"--partition_timestamps", "--partition_timestamps",
",".join([key + ":" + val for (key, val) in partition_timestamps.items()]) ",".join([key + ":" + val for (key, val)
in partition_timestamps.items()])
] ]
def IsSparseImage(filepath): def IsSparseImage(filepath):
with open(filepath, 'rb') as fp: with open(filepath, 'rb') as fp:
# Magic for android sparse image format # Magic for android sparse image format
# https://source.android.com/devices/bootloader/images # https://source.android.com/devices/bootloader/images
return fp.read(4) == b'\x3A\xFF\x26\xED' return fp.read(4) == b'\x3A\xFF\x26\xED'
def SupportsMainlineGkiUpdates(target_file): def SupportsMainlineGkiUpdates(target_file):
"""Return True if the build supports MainlineGKIUpdates. """Return True if the build supports MainlineGKIUpdates.
@ -1027,6 +1032,7 @@ def SupportsMainlineGkiUpdates(target_file):
pattern = re.compile(r"com\.android\.gki\..*\.apex") pattern = re.compile(r"com\.android\.gki\..*\.apex")
return pattern.search(output) is not None return pattern.search(output) is not None
def GenerateAbOtaPackage(target_file, output_file, source_file=None): def GenerateAbOtaPackage(target_file, output_file, source_file=None):
"""Generates an Android OTA package that has A/B update payload.""" """Generates an Android OTA package that has A/B update payload."""
# Stage the output zip package for package signing. # Stage the output zip package for package signing.
@ -1103,7 +1109,8 @@ def GenerateAbOtaPackage(target_file, output_file, source_file=None):
additional_args += ["--max_timestamp", max_timestamp] additional_args += ["--max_timestamp", max_timestamp]
if SupportsMainlineGkiUpdates(source_file): if SupportsMainlineGkiUpdates(source_file):
logger.warning("Detected build with mainline GKI, include full boot image.") logger.warning(
"Detected build with mainline GKI, include full boot image.")
additional_args.extend(["--full_boot", "true"]) additional_args.extend(["--full_boot", "true"])
payload.Generate( payload.Generate(
@ -1271,6 +1278,7 @@ def main(argv):
OPTIONS.disable_vabc = True OPTIONS.disable_vabc = True
elif o == "--spl_downgrade": elif o == "--spl_downgrade":
OPTIONS.spl_downgrade = True OPTIONS.spl_downgrade = True
OPTIONS.wipe_user_data = True
else: else:
return False return False
return True return True
@ -1341,7 +1349,6 @@ def main(argv):
if OPTIONS.incremental_source is None: if OPTIONS.incremental_source is None:
raise ValueError("Cannot generate downgradable full OTAs") raise ValueError("Cannot generate downgradable full OTAs")
# TODO(xunchang) for retrofit and partial updates, maybe we should rebuild the # TODO(xunchang) for retrofit and partial updates, maybe we should rebuild the
# target-file and reload the info_dict. So the info will be consistent with # target-file and reload the info_dict. So the info will be consistent with
# the modified target-file. # the modified target-file.
@ -1349,7 +1356,6 @@ def main(argv):
logger.info("--- target info ---") logger.info("--- target info ---")
common.DumpInfoDict(OPTIONS.info_dict) common.DumpInfoDict(OPTIONS.info_dict)
# Load the source build dict if applicable. # Load the source build dict if applicable.
if OPTIONS.incremental_source is not None: if OPTIONS.incremental_source is not None:
OPTIONS.target_info_dict = OPTIONS.info_dict OPTIONS.target_info_dict = OPTIONS.info_dict
@ -1423,7 +1429,7 @@ def main(argv):
source_spl = source_build_prop.GetProp(SECURITY_PATCH_LEVEL_PROP_NAME) source_spl = source_build_prop.GetProp(SECURITY_PATCH_LEVEL_PROP_NAME)
target_spl = target_build_prop.GetProp(SECURITY_PATCH_LEVEL_PROP_NAME) target_spl = target_build_prop.GetProp(SECURITY_PATCH_LEVEL_PROP_NAME)
is_spl_downgrade = target_spl < source_spl is_spl_downgrade = target_spl < source_spl
if is_spl_downgrade and not OPTIONS.spl_downgrade: if is_spl_downgrade and not OPTIONS.spl_downgrade and not OPTIONS.downgrade:
raise common.ExternalError( raise common.ExternalError(
"Target security patch level {} is older than source SPL {} applying " "Target security patch level {} is older than source SPL {} applying "
"such OTA will likely cause device fail to boot. Pass --spl_downgrade " "such OTA will likely cause device fail to boot. Pass --spl_downgrade "