Merge "releasetools: Fix the size check for AVB images."

am: 905c84cada

Change-Id: I4321bb226c8e77536fd0896980c64ac4ed680e37
This commit is contained in:
Tao Bao 2017-11-15 18:32:38 +00:00 committed by android-build-merger
commit 029b3b6619
1 changed files with 32 additions and 11 deletions

View File

@ -76,6 +76,11 @@ OPTIONS = Options()
# Values for "certificate" in apkcerts that mean special things. # Values for "certificate" in apkcerts that mean special things.
SPECIAL_CERT_STRINGS = ("PRESIGNED", "EXTERNAL") SPECIAL_CERT_STRINGS = ("PRESIGNED", "EXTERNAL")
# The partitions allowed to be signed by AVB (Android verified boot 2.0).
AVB_PARTITIONS = ('boot', 'recovery', 'system', 'vendor', 'dtbo')
class ErrorCode(object): class ErrorCode(object):
"""Define error_codes for failures that happen during the actual """Define error_codes for failures that happen during the actual
update package installation. update package installation.
@ -735,10 +740,18 @@ def SignFile(input_name, output_name, key, password, min_api_level=None,
def CheckSize(data, target, info_dict): def CheckSize(data, target, info_dict):
"""Check the data string passed against the max size limit, if """Checks the data string passed against the max size limit.
any, for the given target. Raise exception if the data is too big.
Print a warning if the data is nearing the maximum size."""
For non-AVB images, raise exception if the data is too big. Print a warning
if the data is nearing the maximum size.
For AVB images, the actual image size should be identical to the limit.
Args:
data: A string that contains all the data for the partition.
target: The partition name. The ".img" suffix is optional.
info_dict: The dict to be looked up for relevant info.
"""
if target.endswith(".img"): if target.endswith(".img"):
target = target[:-4] target = target[:-4]
mount_point = "/" + target mount_point = "/" + target
@ -758,6 +771,14 @@ def CheckSize(data, target, info_dict):
return return
size = len(data) size = len(data)
# target could be 'userdata' or 'cache'. They should follow the non-AVB image
# path.
if info_dict.get("avb_enable") == "true" and target in AVB_PARTITIONS:
if size != limit:
raise ExternalError(
"Mismatching image size for %s: expected %d actual %d" % (
target, limit, size))
else:
pct = float(size) * 100.0 / limit pct = float(size) * 100.0 / limit
msg = "%s size (%d) is %.2f%% of limit (%d)" % (target, size, pct, limit) msg = "%s size (%d) is %.2f%% of limit (%d)" % (target, size, pct, limit)
if pct >= 99.0: if pct >= 99.0: