mod_image_for_recovery: Generalize partition hash calculation The `calculate_kernel_hash` function has been renamed to `calculate_partition_hash` and refactored to accept a partition number as an argument, making it reusable for hashing any partition. The temporary file cleanup is also improved. BUG=b:426664945 TEST=Builders/CQ Change-Id: I18a220be5269f52545d68fedac6987c1d2713923 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosutils/+/6833627 Reviewed-by: Mike Frysinger <vapier@chromium.org> Commit-Queue: Jae Hoon Kim <kimjae@chromium.org> Tested-by: Jae Hoon Kim <kimjae@chromium.org>
diff --git a/mod_image_for_recovery.sh b/mod_image_for_recovery.sh index 925cc00..0821aa9 100755 --- a/mod_image_for_recovery.sh +++ b/mod_image_for_recovery.sh
@@ -94,20 +94,25 @@ "unencrypted/dlc-factory-images" ) -calculate_kernel_hash() { +# Calculates the hash of a partition in an image. +# Args: +# $1: GPT image filename +# $2: partition number +calculate_partition_hash() { local img="$1" + local part_num="$2" - local partition_num_kern_a kern_offset kern_size kern_tmp + local offset size tmp - partition_num_kern_a="$(get_image_partition_number "${img}" "KERN-A")" - kern_offset="$(partoffset "${img}" "${partition_num_kern_a}")" - kern_size="$(partsize "${img}" "${partition_num_kern_a}")" - kern_tmp=$(mktemp) + offset="$(partoffset "${img}" "${part_num}")" + size="$(partsize "${img}" "${part_num}")" + tmp=$(mktemp) + # Always cleanup our temp file. + trap 'rm -f "${tmp}"' RETURN - dd if="${FLAGS_image}" bs=512 count="${kern_size}" \ - skip="${kern_offset}" of="${kern_tmp}" 1>&2 - sha256sum "${kern_tmp}" | cut -f1 -d' ' - rm "${kern_tmp}" + dd if="${img}" bs=512 count="${size}" \ + skip="${offset}" of="${tmp}" 1>&2 + sha256sum "${tmp}" | cut -f1 -d' ' } create_recovery_kernel_image() { @@ -131,7 +136,7 @@ # partitions appropriately without needing any external dependencies.) local kern_hash - kern_hash="$(calculate_kernel_hash "${FLAGS_image}")" + kern_hash="$(calculate_partition_hash "${FLAGS_image}" 2)" # TODO(wad) add FLAGS_boot_args support too. # shellcheck source=build_kernel_image.sh @@ -162,7 +167,7 @@ "EFI-SYSTEM") efi_size=$(partsize "${RECOVERY_IMAGE}" "${partition_num_efi_system}") - kern_hash="$(calculate_kernel_hash "${RECOVERY_IMAGE}")" + kern_hash="$(calculate_partition_hash "${RECOVERY_IMAGE}" 2)" if [[ ${efi_size} -ne 0 ]]; then local efi_dir