Preparation for adding support for zstd compressed efi zboot kernel
images.
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Daan De Meyer <daan.j.demeyer@gmail.com>
---
hw/arm/boot.c | 4 ++--
hw/core/loader.c | 9 +++++----
hw/nvram/fw_cfg.c | 2 +-
include/hw/loader.h | 2 +-
4 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/hw/arm/boot.c b/hw/arm/boot.c
index b91660208f..6cf8a4b7fd 100644
--- a/hw/arm/boot.c
+++ b/hw/arm/boot.c
@@ -823,11 +823,11 @@ static uint64_t load_aarch64_image(const char *filename, hwaddr mem_base,
hwaddr kernel_load_offset = KERNEL64_LOAD_ADDR;
uint64_t kernel_size = 0;
uint8_t *buffer;
+ size_t max_size = LOAD_IMAGE_MAX_DECOMPRESSED_BYTES;
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_size, &buffer);
if (size < 0) {
gsize len;
diff --git a/hw/core/loader.c b/hw/core/loader.c
index 590c5b02aa..f940b6a227 100644
--- a/hw/core/loader.c
+++ b/hw/core/loader.c
@@ -814,8 +814,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);
@@ -885,6 +885,7 @@ ssize_t unpack_efi_zboot_image(uint8_t **buffer, ssize_t *size)
uint8_t *data = NULL;
ssize_t ploff, plsize;
ssize_t bytes;
+ size_t max_bytes = LOAD_IMAGE_MAX_DECOMPRESSED_BYTES;
/* ignore if this is too small to be a EFI zboot image */
if (*size < sizeof(*header)) {
@@ -916,8 +917,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 aa24050493..af3b112524 100644
--- a/hw/nvram/fw_cfg.c
+++ b/hw/nvram/fw_cfg.c
@@ -1115,7 +1115,7 @@ 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) {
diff --git a/include/hw/loader.h b/include/hw/loader.h
index d035e72748..3371de506f 100644
--- a/include/hw/loader.h
+++ b/include/hw/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);
--
2.51.1