diff --git a/components/nvs_flash/Kconfig b/components/nvs_flash/Kconfig index 98cf979871..6312591d35 100644 --- a/components/nvs_flash/Kconfig +++ b/components/nvs_flash/Kconfig @@ -9,4 +9,15 @@ menu "NVS" the complete NVS data, except the page headers. It requires XTS encryption keys to be stored in an encrypted partition. This means enabling flash encryption is a pre-requisite for this feature. + + config NVS_COMPATIBLE_PRE_V4_3_ENCRYPTION_FLAG + bool "NVS partition encrypted flag compatible with ESP-IDF before v4.3" + depends on SECURE_FLASH_ENC_ENABLED + help + Enabling this will ignore "encrypted" flag for NVS partitions. NVS encryption + scheme is different than hardware flash encryption and hence it is not recommended + to have "encrypted" flag for NVS partitions. This was not being checked in pre v4.3 + IDF. Hence, if you have any devices where this flag is kept enabled in partition + table then enabling this config will allow to have same behavior as pre v4.3 IDF. + endmenu diff --git a/components/spi_flash/partition.c b/components/spi_flash/partition.c index b4a0f3c5c1..9ac13ebe9d 100644 --- a/components/spi_flash/partition.c +++ b/components/spi_flash/partition.c @@ -229,6 +229,15 @@ static esp_err_t load_partitions(void) item->info.encrypted = true; } +#if CONFIG_NVS_COMPATIBLE_PRE_V4_3_ENCRYPTION_FLAG + if (entry.type == ESP_PARTITION_TYPE_DATA && + entry.subtype == ESP_PARTITION_SUBTYPE_DATA_NVS && + (entry.flags & PART_FLAG_ENCRYPTED)) { + ESP_LOGI(TAG, "Ignoring encrypted flag for \"%s\" partition", entry.label); + item->info.encrypted = false; + } +#endif + // item->info.label is initialized by calloc, so resulting string will be null terminated strncpy(item->info.label, (const char*) entry.label, sizeof(item->info.label) - 1);