| From 6807d4b30f7d4ed32d3c54dfcaf3ace63eaa4f02 Mon Sep 17 00:00:00 2001 |
| From: Emekcan Aras <emekcan.aras@arm.com> |
| Date: Thu, 26 Oct 2023 11:46:04 +0100 |
| Subject: [PATCH] platform: corstone1000: align capsule update structs |
| |
| U-boot mkefitool creates capsule image without packed and byte-aligned |
| structs. This patch aligns the capsule-update structures and avoids |
| crashes in case of unaligned pointer access. |
| |
| Signed-off-by: Emekcan Aras <emekcan.aras@arm.com> |
| Upstream-Status: Pending |
| --- |
| .../fw_update_agent/uefi_capsule_parser.c | 14 +++++++------- |
| 1 file changed, 7 insertions(+), 7 deletions(-) |
| |
| diff --git a/platform/ext/target/arm/corstone1000/fw_update_agent/uefi_capsule_parser.c b/platform/ext/target/arm/corstone1000/fw_update_agent/uefi_capsule_parser.c |
| index c706c040ac..9f8d12ad4e 100644 |
| --- a/platform/ext/target/arm/corstone1000/fw_update_agent/uefi_capsule_parser.c |
| +++ b/platform/ext/target/arm/corstone1000/fw_update_agent/uefi_capsule_parser.c |
| @@ -34,14 +34,14 @@ typedef struct { |
| uint32_t header_size; |
| uint32_t flags; |
| uint32_t capsule_image_size; |
| -} efi_capsule_header_t; |
| +} efi_capsule_header_t __attribute__((packed, aligned(1))); |
| |
| typedef struct { |
| uint32_t version; |
| uint16_t embedded_driver_count; |
| uint16_t payload_item_count; |
| uint64_t item_offset_list[]; |
| -} efi_firmware_management_capsule_header_t; |
| +} efi_firmware_management_capsule_header_t __attribute__((packed, aligned(1))); |
| |
| typedef struct { |
| uint32_t version; |
| @@ -52,14 +52,14 @@ typedef struct { |
| uint32_t update_vendorcode_size; |
| uint64_t update_hardware_instance; //introduced in v2 |
| uint64_t image_capsule_support; //introduced in v3 |
| -} efi_firmware_management_capsule_image_header_t; |
| +} efi_firmware_management_capsule_image_header_t __attribute__((packed, aligned(1))); |
| |
| typedef struct { |
| uint32_t signature; |
| uint32_t header_size; |
| uint32_t fw_version; |
| uint32_t lowest_supported_version; |
| -} fmp_payload_header_t; |
| +} fmp_payload_header_t __attribute__((packed, aligned(1))); |
| |
| #define ANYSIZE_ARRAY 0 |
| |
| @@ -68,18 +68,18 @@ typedef struct { |
| uint16_t wRevision; |
| uint16_t wCertificateType; |
| uint8_t bCertificate[ANYSIZE_ARRAY]; |
| -} WIN_CERTIFICATE; |
| +} WIN_CERTIFICATE __attribute__((packed, aligned(1))); |
| |
| typedef struct { |
| WIN_CERTIFICATE hdr; |
| struct efi_guid cert_type; |
| uint8_t cert_data[ANYSIZE_ARRAY]; |
| -} win_certificate_uefi_guid_t; |
| +} win_certificate_uefi_guid_t __attribute__((packed, aligned(1))); |
| |
| typedef struct { |
| uint64_t monotonic_count; |
| win_certificate_uefi_guid_t auth_info; |
| -} efi_firmware_image_authentication_t; |
| +} efi_firmware_image_authentication_t __attribute__((packed, aligned(1))); |
| |
| |
| enum uefi_capsule_error_t uefi_capsule_retrieve_images(void* capsule_ptr, |
| -- |
| 2.25.1 |
| |