From: Daan De Meyer <[email protected]> Preparation for adding support for zstd compressed efi zboot kernel images.
Reviewed-by: Daniel P. Berrangé <[email protected]> Reviewed-by: Philippe Mathieu-Daudé <[email protected]> Tested-by: Philippe Mathieu-Daudé <[email protected]> Signed-off-by: Daan De Meyer <[email protected]> Message-ID: <[email protected]> [PMD: Wrap long line to avoid checkpatch.pl warning] Signed-off-by: Philippe Mathieu-Daudé <[email protected]> --- include/hw/core/loader.h | 2 +- hw/arm/boot.c | 4 ++-- hw/core/loader.c | 9 +++++---- hw/nvram/fw_cfg.c | 3 ++- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/include/hw/core/loader.h b/include/hw/core/loader.h index 6f917035034..1f14dccbca9 100644 --- a/include/hw/core/loader.h +++ b/include/hw/core/loader.h @@ -82,7 +82,7 @@ ssize_t load_image_mr(const char *filename, MemoryRegion *mr); * load_image_gzipped_buffer() will read. It prevents * g_malloc() in those functions from allocating a huge amount of memory. */ -#define LOAD_IMAGE_MAX_GUNZIP_BYTES (256 << 20) +#define LOAD_IMAGE_MAX_DECOMPRESSED_BYTES (256 << 20) ssize_t load_image_gzipped_buffer(const char *filename, uint64_t max_sz, uint8_t **buffer); diff --git a/hw/arm/boot.c b/hw/arm/boot.c index e22609de93a..c97d4c4e118 100644 --- a/hw/arm/boot.c +++ b/hw/arm/boot.c @@ -816,14 +816,14 @@ static ssize_t arm_load_elf(struct arm_boot_info *info, uint64_t *pentry, static uint64_t load_aarch64_image(const char *filename, hwaddr mem_base, hwaddr *entry, AddressSpace *as) { + const size_t max_bytes = LOAD_IMAGE_MAX_DECOMPRESSED_BYTES; hwaddr kernel_load_offset = KERNEL64_LOAD_ADDR; uint64_t kernel_size = 0; uint8_t *buffer; ssize_t size; /* On aarch64, it's the bootloader's job to uncompress the kernel. */ - size = load_image_gzipped_buffer(filename, LOAD_IMAGE_MAX_GUNZIP_BYTES, - &buffer); + size = load_image_gzipped_buffer(filename, max_bytes, &buffer); if (size < 0) { gsize len; diff --git a/hw/core/loader.c b/hw/core/loader.c index f4581f76b9a..79cb96b4664 100644 --- a/hw/core/loader.c +++ b/hw/core/loader.c @@ -829,8 +829,8 @@ ssize_t load_image_gzipped_buffer(const char *filename, uint64_t max_sz, goto out; } - if (max_sz > LOAD_IMAGE_MAX_GUNZIP_BYTES) { - max_sz = LOAD_IMAGE_MAX_GUNZIP_BYTES; + if (max_sz > LOAD_IMAGE_MAX_DECOMPRESSED_BYTES) { + max_sz = LOAD_IMAGE_MAX_DECOMPRESSED_BYTES; } data = g_malloc(max_sz); @@ -896,6 +896,7 @@ struct linux_efi_zboot_header { */ ssize_t unpack_efi_zboot_image(uint8_t **buffer, ssize_t *size) { + const size_t max_bytes = LOAD_IMAGE_MAX_DECOMPRESSED_BYTES; const struct linux_efi_zboot_header *header; uint8_t *data = NULL; ssize_t ploff, plsize; @@ -931,8 +932,8 @@ ssize_t unpack_efi_zboot_image(uint8_t **buffer, ssize_t *size) return -1; } - data = g_malloc(LOAD_IMAGE_MAX_GUNZIP_BYTES); - bytes = gunzip(data, LOAD_IMAGE_MAX_GUNZIP_BYTES, *buffer + ploff, plsize); + data = g_malloc(max_bytes); + bytes = gunzip(data, max_bytes, *buffer + ploff, plsize); if (bytes < 0) { fprintf(stderr, "failed to decompress EFI zboot image\n"); g_free(data); diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c index 437ab6e210f..69e97361453 100644 --- a/hw/nvram/fw_cfg.c +++ b/hw/nvram/fw_cfg.c @@ -1115,7 +1115,8 @@ void load_image_to_fw_cfg(FWCfgState *fw_cfg, uint16_t size_key, if (try_decompress) { size = load_image_gzipped_buffer(image_name, - LOAD_IMAGE_MAX_GUNZIP_BYTES, &data); + LOAD_IMAGE_MAX_DECOMPRESSED_BYTES, + &data); } if (size == (size_t)-1) { -- 2.52.0
