From dd4d020a7682717ec3592eb8a1e15ab1c0378c4b Mon Sep 17 00:00:00 2001 From: matejcik Date: Fri, 7 Apr 2023 13:27:57 +0200 Subject: [PATCH] fix(core/bootloader): correctly handle images smaller than one chunk --- core/embed/bootloader/.changelog.d/2941.fixed | 1 + core/embed/bootloader/messages.c | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 core/embed/bootloader/.changelog.d/2941.fixed diff --git a/core/embed/bootloader/.changelog.d/2941.fixed b/core/embed/bootloader/.changelog.d/2941.fixed new file mode 100644 index 0000000000..a3bc13a38d --- /dev/null +++ b/core/embed/bootloader/.changelog.d/2941.fixed @@ -0,0 +1 @@ +Fix installation of images smaller than 128kB. diff --git a/core/embed/bootloader/messages.c b/core/embed/bootloader/messages.c index 35800fbf45..dd9106c308 100644 --- a/core/embed/bootloader/messages.c +++ b/core/embed/bootloader/messages.c @@ -597,7 +597,10 @@ int process_msg_FirmwareUpload(uint8_t iface_num, uint32_t msg_size, // request the rest of the first chunk MSG_SEND_INIT(FirmwareRequest); - chunk_requested = IMAGE_CHUNK_SIZE - read_offset; + uint32_t chunk_limit = (firmware_remaining > IMAGE_CHUNK_SIZE) + ? IMAGE_CHUNK_SIZE + : firmware_remaining; + chunk_requested = chunk_limit - read_offset; MSG_SEND_ASSIGN_REQUIRED_VALUE(offset, read_offset); MSG_SEND_ASSIGN_REQUIRED_VALUE(length, chunk_requested); MSG_SEND(FirmwareRequest);