mirror of
https://github.com/espressif/esp-idf.git
synced 2025-07-30 18:57:19 +02:00
Merge branch 'fix/fix_image_check_16_mega_bytes_limit_v5.3' into 'release/v5.3'
bootloader: fixed image cannot exceed 16MB issue (v5.3) See merge request espressif/esp-idf!38845
This commit is contained in:
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@ -47,7 +47,12 @@ static const char *TAG = "esp_image";
|
|||||||
|
|
||||||
#define HASH_LEN ESP_IMAGE_HASH_LEN
|
#define HASH_LEN ESP_IMAGE_HASH_LEN
|
||||||
|
|
||||||
#define SIXTEEN_MB 0x1000000
|
#if SOC_SPI_MEM_SUPPORT_CACHE_32BIT_ADDR_MAP
|
||||||
|
#define ESP_IMAGE_MAX_FLASH_ADDR_SIZE UINT32_MAX
|
||||||
|
#else
|
||||||
|
#define ESP_IMAGE_MAX_FLASH_ADDR_SIZE 0x1000000
|
||||||
|
#endif
|
||||||
|
|
||||||
#define ESP_ROM_CHECKSUM_INITIAL 0xEF
|
#define ESP_ROM_CHECKSUM_INITIAL 0xEF
|
||||||
|
|
||||||
/* Headroom to ensure between stack SP (at time of checking) and data loaded from flash */
|
/* Headroom to ensure between stack SP (at time of checking) and data loaded from flash */
|
||||||
@ -138,7 +143,7 @@ static esp_err_t image_load(esp_image_load_mode_t mode, const esp_partition_pos_
|
|||||||
verify_sha = (part->offset != ESP_BOOTLOADER_OFFSET) && do_verify;
|
verify_sha = (part->offset != ESP_BOOTLOADER_OFFSET) && do_verify;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (part->size > SIXTEEN_MB) {
|
if (part->size > ESP_IMAGE_MAX_FLASH_ADDR_SIZE) {
|
||||||
err = ESP_ERR_INVALID_ARG;
|
err = ESP_ERR_INVALID_ARG;
|
||||||
FAIL_LOAD("partition size 0x%"PRIx32" invalid, larger than 16MB", part->size);
|
FAIL_LOAD("partition size 0x%"PRIx32" invalid, larger than 16MB", part->size);
|
||||||
}
|
}
|
||||||
@ -297,7 +302,7 @@ esp_err_t esp_image_verify(esp_image_load_mode_t mode, const esp_partition_pos_t
|
|||||||
esp_err_t esp_image_get_metadata(const esp_partition_pos_t *part, esp_image_metadata_t *metadata)
|
esp_err_t esp_image_get_metadata(const esp_partition_pos_t *part, esp_image_metadata_t *metadata)
|
||||||
{
|
{
|
||||||
esp_err_t err;
|
esp_err_t err;
|
||||||
if (metadata == NULL || part == NULL || part->size > SIXTEEN_MB) {
|
if (metadata == NULL || part == NULL || part->size > ESP_IMAGE_MAX_FLASH_ADDR_SIZE) {
|
||||||
return ESP_ERR_INVALID_ARG;
|
return ESP_ERR_INVALID_ARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -751,7 +756,7 @@ static esp_err_t process_segment_data(int segment, intptr_t load_addr, uint32_t
|
|||||||
static esp_err_t verify_segment_header(int index, const esp_image_segment_header_t *segment, uint32_t segment_data_offs, bool silent)
|
static esp_err_t verify_segment_header(int index, const esp_image_segment_header_t *segment, uint32_t segment_data_offs, bool silent)
|
||||||
{
|
{
|
||||||
if ((segment->data_len & 3) != 0
|
if ((segment->data_len & 3) != 0
|
||||||
|| segment->data_len >= SIXTEEN_MB) {
|
|| segment->data_len >= ESP_IMAGE_MAX_FLASH_ADDR_SIZE) {
|
||||||
if (!silent) {
|
if (!silent) {
|
||||||
ESP_LOGE(TAG, "invalid segment length 0x%"PRIx32, segment->data_len);
|
ESP_LOGE(TAG, "invalid segment length 0x%"PRIx32, segment->data_len);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user