Skip to content

Commit 574b27d

Browse files
committed
Merge branch 'fix/fix_image_check_16_mega_bytes_limit' into 'master'
bootloader: fixed image cannot exceed 16MB issue See merge request espressif/esp-idf!38397
2 parents 35d1704 + 755fd86 commit 574b27d

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

components/bootloader_support/src/esp_image_format.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD
2+
* SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -48,7 +48,12 @@ static const char *TAG = "esp_image";
4848

4949
#define HASH_LEN ESP_IMAGE_HASH_LEN
5050

51-
#define SIXTEEN_MB 0x1000000
51+
#if SOC_SPI_MEM_SUPPORT_CACHE_32BIT_ADDR_MAP
52+
#define ESP_IMAGE_MAX_FLASH_ADDR_SIZE UINT32_MAX
53+
#else
54+
#define ESP_IMAGE_MAX_FLASH_ADDR_SIZE 0x1000000
55+
#endif
56+
5257
#define ESP_ROM_CHECKSUM_INITIAL 0xEF
5358

5459
/* Headroom to ensure between stack SP (at time of checking) and data loaded from flash */
@@ -157,7 +162,7 @@ static esp_err_t image_load(esp_image_load_mode_t mode, const esp_partition_pos_
157162
verify_sha = !is_bootloader(part->offset) && do_verify;
158163
#endif
159164

160-
if (part->size > SIXTEEN_MB) {
165+
if (part->size > ESP_IMAGE_MAX_FLASH_ADDR_SIZE) {
161166
err = ESP_ERR_INVALID_ARG;
162167
FAIL_LOAD("partition size 0x%"PRIx32" invalid, larger than 16MB", part->size);
163168
}
@@ -316,7 +321,7 @@ esp_err_t esp_image_verify(esp_image_load_mode_t mode, const esp_partition_pos_t
316321
esp_err_t esp_image_get_metadata(const esp_partition_pos_t *part, esp_image_metadata_t *metadata)
317322
{
318323
esp_err_t err;
319-
if (metadata == NULL || part == NULL || part->size > SIXTEEN_MB) {
324+
if (metadata == NULL || part == NULL || part->size > ESP_IMAGE_MAX_FLASH_ADDR_SIZE) {
320325
return ESP_ERR_INVALID_ARG;
321326
}
322327

@@ -780,7 +785,7 @@ static esp_err_t process_segment_data(int segment, intptr_t load_addr, uint32_t
780785
static esp_err_t verify_segment_header(int index, const esp_image_segment_header_t *segment, uint32_t segment_data_offs, esp_image_metadata_t *metadata, bool silent)
781786
{
782787
if ((segment->data_len & 3) != 0
783-
|| segment->data_len >= SIXTEEN_MB) {
788+
|| segment->data_len >= ESP_IMAGE_MAX_FLASH_ADDR_SIZE) {
784789
if (!silent) {
785790
ESP_LOGE(TAG, "invalid segment length 0x%"PRIx32, segment->data_len);
786791
}

0 commit comments

Comments
 (0)